【发布时间】:2015-12-14 10:45:08
【问题描述】:
我有一个带有和不带命名空间前缀的默认命名空间的 xml 文件。当我生成 xml 输出时,我会为所有 xml 元素添加前缀。由于我使用的是默认命名空间,有没有办法摆脱前缀?
class Program
{
static void Main(string[] args)
{
var xml =
"<root xmlns='default-namespace' xmlns:key='default-namespace'>" +
" <node1></node1>" +
" <node2></node2>" +
"</root>";
var document = XDocument.Parse(xml);
var output = document.ToString();
}
}
输出:
<key:root xmlns="default-namespace" xmlns:key="default-namespace">
<key:node1></key:node1>
<key:node2></key:node2>
</key:root>
我的期望:
<root xmlns="default-namespace" xmlns:key="default-namespace">
<node1></node1>
<node2></node2>
</root>
很遗憾,我无法删除重复的命名空间声明。我使用的实际xml文件是由另一方提供的,我需要做的修改尽可能少。
【问题讨论】:
-
在我看来,不存储节点名称的前缀是 LINQ to XML 对象模型的一个缺点,因此序列化程序在将树序列化为时必须根据命名空间声明属性选择前缀一串 XML。似乎 ToString() 或 Save 的当前实现使用命名空间的最后找到的命名空间声明,因为将顺序更改为
<root xmlns:key='default-namespace' xmlns='default-namespace'>会产生不同的结果,但这显然不是可以依赖的。如果前缀很重要,请选择不同的树模型,例如 XmlDocument。
标签: c# xml namespaces linq-to-xml