我第一次在.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