我正在創建一個這樣開頭的 XML 檔案:
XNamespace xNamespace = "http://www.topografix.com/GPX/1/1";
var trkseg = new XElement("trkseg");
XElement GPX = new XElement(xNamespace "gpx",
new XAttribute("xmlns", xNamespace),
new XAttribute("version", "1.0"),
new XAttribute("creator", "quilkin.co.uk"),
new XElement("trk",
new XElement("name", RouteName()),
trkseg
)
);
產生以下內容:
<gpx creator="quilkin.co.uk" version="1.0" xmlns="http://www.topografix.com/GPX/1/1">
<trk xmlns="">
<name>Route Name</name>
<trkseg/>
</trk>
</gpx>
我很困惑為什么'trk'元素有一個屬性'xlmns'。對于大多數 GPX 檔案的讀者來說,添加這個不是問題,但有一個(非常常見的一個!)不喜歡它并拒絕加載檔案。
我可以操縱文本來洗掉屬性,但為什么會發生呢?
uj5u.com熱心網友回復:
該xmlns屬性定義了當前和所有在它們前面沒有顯式命名空間的后代元素的命名空間。例子:
<a xmlns="x"> // = namespace x, tag a
<b> // = namespace x, tag b
<c xmlns=""> // = empty namespace, tag c
<d> // = empty namespace, tag d
</d>
</c>
</b>
</a>
或者,如果您更喜歡更真實的示例:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<svg xmlns="http://www.w3.org/2000/svg">
<rect x="20" y="20" width="50" height="50" />
</svg>
</body>
</html>
在這里,htmlandbody位于 XHTML 命名空間中,而svgandrect位于 SVG 命名空間中。
在您的代碼中,您gpx使用包含在中的命名空間進行xNamespace創建,但您使用空命名空間創建后續元素。因此,XML 需要在 trk.xml 中將命名空間“重置”為空。
如果您想擺脫該xmslns=""屬性,只需確保所有元素都在同一個命名空間中,即替換
new XElement("trk",
new XElement("name", RouteName()),
new XElement("trkseg"))
和
new XElement(xNamespace "trk",
new XElement(xNamespace "name", RouteName()),
new XElement(xNamespace "trkseg"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490582.html
