Ian*_*las 4 c# linq namespaces linq-to-xml
我在LINQ中遇到了一些名称空间问题.因此,从MSDN的教程开始,我们可以执行以下操作,使用LINQ将命名空间添加到XML文档:
// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);
Run Code Online (Sandbox Code Playgroud)
哪个会给你XML:
<Root xmlns="http://www.adventure-works.com">
<Child>child content</Child>
</Root>
Run Code Online (Sandbox Code Playgroud)
但我想做的是:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Roots");
XElement child = new XElement("Child", "child content");
root.Add(child);
Console.WriteLine(root);
Run Code Online (Sandbox Code Playgroud)
但这给了我以下xml:
<Root xmlns="http://www.adventure-works.com">
<Child xmlns="">child content</Child>
</Root>
Run Code Online (Sandbox Code Playgroud)
问题是我不想xmlns=""
在我的子元素中编辑(编辑:我不想在我的子元素中使用任何名称空间),我希望它看起来就像第一种产生它的方式.我建立一个相当大的XML文件,所以我不能添加的所有元素在同一声明,并需要能够使用Add
和SetAttributeValue
多种方法XElements
仍然具有xmlns
的第一个元素.我有什么想法可以做到这一点?
谢谢!
此行为是XML信息集的基础.xmlns
声明的效果适用于所有儿童内容; 由于您没有为子元素指定命名空间,因此标准行为是将其放在未命名的命名空间中.为了将一个元素嵌套在一个声明默认命名空间的未命名命名空间内,需要声明将默认命名空间xmlns=''
重置为未命名.
总结一下,根据您的编辑:
xmlns=''
要求由XML命名空间规范,以覆盖在文档元素声明的名称空间.xmlns=''
东西),则需要确保在代码中将所有名称空间添加到相同的名称空间中.我不知道如何XElement
自动继承其父级的命名空间.但是,在构建完DOM之后,您总是可以对其进行后处理,以便在任何地方设置一个名称空间,类似于:
foreach(var element in doc.Descendants())
element.Name = aw + element.Name.LocalName;
Run Code Online (Sandbox Code Playgroud)
我不相信这样做除了一次性代码之外的其他任何东西都是可取的,因为它可能会对可维护性产生不利影响.我必须处理混合命名空间的大量XML文档,以及像上面的代码片段一样"粉碎"命名空间确实会破坏混合命名空间文档的语义.
归档时间: |
|
查看次数: |
1399 次 |
最近记录: |