我第一次在.NET 3.5中使用Linq for XML,並且遇到命名空間問題。也就是說,XElement是這樣打印的:<opf:metadata>
當我只想讓它說<metadata>
。XElement是否不應該繼承其父級Xelement的名稱空間?
下面是代碼:
XNamespace opfNamespace = "http://www.idpf.org/2007/opf";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace dcterms = "http://purl.org/dc/terms/";
XNamespace dc = "http://purl.org/dc/elements/1.1/";
opfRoot = new XElement(opfNamespace + "package",
new XAttribute("version", "2.0"),
new XAttribute("unique-identifier", "uuid_id"));
XElement metadata = new XElement(opfNamespace + "metadata",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(XNamespace.Xmlns + "opf", opfNamespace),
new XAttribute(XNamespace.Xmlns + "dcterms", dcterms),
new XAttribute(XNamespace.Xmlns + "dc", dc),
new XElement(dc + "language", "pt-BR"));
opfRoot.Add(metadata);
這裏是結果:
<?xml version="1.0" encoding="utf-8"?>
<package version="2.0" unique-identifier="uuid_id" xmlns="http://www.idpf.org/2007/opf">
<opf:metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:language>pt-BR</dc:language>
</opf:metadata>
</package>
我預期的元數據元素來沒有OPF: 「OPF:元數據」
如果我從{opfNameSpace +「metadata」}中刪除opfNameSpace,我會在元數據元素中獲得一個空白的xmlns名稱空間(xmlns =「」)。
我看着這個線程:
How can I write xml with a namespace and prefix with XElement?
這一個:
XElement default namespace on attributes provides unexpected behaviour
但他們並沒有解決我的問題。有任何想法嗎?
太棒了!非常感謝。 – 2011-02-11 17:55:05
+1是第一個但沒有得到信用。 – 2013-04-05 12:07:02