當你寫
XNamespace ns = "xsi";
這是創建僅 「XSI」 的URI的XNamespace
。這不是你想要的。你需要一個命名空間別名的xsi
...與適當的URI通過xmlns
屬性。所以,你想:
XDocument doc = XDocument.Parse(framedoc.ToString());
foreach (var node in doc.Descendants("document").ToList())
{
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
node.SetAttributeValue(XNamespace.Xmnls + "xsi", ns.NamespaceName);
node.SetAttributeValue(ns + "schema", "");
node.Name = "alto";
}
或者更好的,只是設定在根元素別名:
XDocument doc = XDocument.Parse(framedoc.ToString());
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
doc.Root.SetAttributeValue(XNamespace.Xmlns + "xsi", ns.NamespaceName);
foreach (var node in doc.Descendants("document").ToList())
{
node.SetAttributeValue(ns + "schema", "");
node.Name = "alto";
}
樣品創建文檔:
using System;
using System.Xml.Linq;
public class Test
{
static void Main()
{
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
XDocument doc = new XDocument(
new XElement("root",
new XAttribute(XNamespace.Xmlns + "xsi", ns.NamespaceName),
new XElement("element1", new XAttribute(ns + "schema", "s1")),
new XElement("element2", new XAttribute(ns + "schema", "s2"))
)
);
Console.WriteLine(doc);
}
}
輸出:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<element1 xsi:schema="s1" />
<element2 xsi:schema="s2" />
</root>
可能的[XElement命名空間(如何?)]重複(http:// s tackoverflow.com/questions/4985974/xelement-namespaces-how-to) – CSharpie
@CSharpie好心看看最新的問題,爲什麼它會給我錯誤的輸出?謝謝 –
該輸出的哪一位是「錯誤的」?請在問題中突出顯示它,理想情況下將輸出分成多行,以便更易於閱讀。 (如果你可以簡化這個以減少可能的位數,這也會有幫助。) –