如何获取 XML 标记中包含特殊字符的 XElement
我正在尝试遍历一个符合 SDMX 的 XML 文档。下面是一个简短的示例:
<root>
<csf:DataSet id="J10">
<kf:Series>
<value> 107.92
</value>
</kf:Series>
</csf:DataSet>
</root>
但是,当我尝试在 C# 中使用 Linq to Xml 执行以下操作时,我收到 XmlException。
XElement dataset = document.Element("csf:DataSet");
异常文本是: 名称中不能包含“:”字符(十六进制值 0x3A)。
我无法控制 XML。关于如何克服这个问题有什么想法吗?
I have an XML document I'm trying to traverse, which is SDMX-compliant. Here's a short sample:
<root>
<csf:DataSet id="J10">
<kf:Series>
<value> 107.92
</value>
</kf:Series>
</csf:DataSet>
</root>
However, when I try to do the following using Linq to Xml in C#, I get an XmlException.
XElement dataset = document.Element("csf:DataSet");
The Exception text is:
The ':' character, hexadecimal value 0x3A, cannot be included in a name.
I have no control over the XML. Any ideas on how I can overcome this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请注意,您必须指定 csf 命名空间的 uri。一个完整的例子:
Note that you have to specify the uri of the csf namespace. A full example:
尝试使用 XNamespace 来限定您要提取的 DataSet 元素。
Try using XNamespace to qualify the DataSet element you are looking to extract.
我也有同样的问题。这里的答案之一帮助了我,但不是全部,所以这是我的解决方案/说明:
您需要做的是为您的命名空间指定一个 URL,如下所示:
...然后在每个中添加该命名空间
元素
:但是,要使其正常工作,您必须在 XML 中包含该特定 URI,如下所示:
现在,您可以将
someElement
(和其他元素)添加到 < code>rootElement,并且名称空间将被包含在内,因为它已在根中(通过 url)引用:这将生成如下所示的 XML:
I had the same problem. One of the answers here helped me on my way, but not all the way, so here is my solution / clarification:
What you need to do is specify an URL for your namespace, like this:
...then prepend that namespace in each
Element
:For this to work however, you must include that specific URI in the XML as follows:
Now you can add
someElement
(and others) torootElement
, and the namespace will be included, because it has been referenced (by the url) in the root:This will generate XML that looks something like this: