【发布时间】:2015-06-23 13:33:01
【问题描述】:
我有一个 XML 文档,其中包含命名空间中的一些内容。这是一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:test="urn:my-test-urn">
<Item name="Item one">
<test:AlternativeName>Another name</test:AlternativeName>
<Price test:Currency="GBP">124.00</Price>
</Item>
</root>
我想删除 test 命名空间中的所有内容 - 不仅从标签中删除命名空间前缀,而且实际上从文档中删除所有节点(元素和属性)(在本例中)在test 命名空间中。我需要的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:test="urn:my-test-urn">
<Item name="Item one">
<Price>124.00</Price>
</Item>
</root>
我目前并不太担心命名空间声明是否仍然存在,现在我很乐意只删除指定命名空间中的内容。请注意,文档中可能有多个命名空间要修改,因此我希望能够指定要删除哪个命名空间。
我尝试过使用 .Descendants().Where(e => e.Name.Namespace == "test") 来做这件事,但这只是为了返回一个 IEnumerable<XElement> 所以它不能帮助我找到属性,如果我使用 .DescendantNodes() 我看不到查询命名空间前缀,因为这似乎不是 XNode 上的属性。
我可以遍历每个元素,然后遍历元素上的每个属性,检查每个人的Name.Namespace,但这似乎不优雅且难以阅读。
有没有办法使用 LINQ to Xml 实现这一点?
【问题讨论】:
标签: c# xml linq-to-xml