【发布时间】:2011-02-11 17:41:36
【问题描述】:
我第一次在 .NET 3.5 中使用 Linq for XML,但在命名空间方面遇到了一些问题。即,XElement 是这样打印的:<opf:metadata> 当我只想说<metadata>。
代码如下:
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:metadata"
如果我从 {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
但他们没有解决我的问题。有什么想法吗?
【问题讨论】:
标签: c# xml linq namespaces