包含命名空间的 XML 元素的 XDocument 或 XElement 解析
我尝试读取从 log4net UdpAppender 捕获的以下字符串。
<log4net:event logger="TestingTransmitter.Program"
timestamp="2009-08-02T17:50:18.928+01:00"
level="ERROR"
thread="9"
domain="TestingTransmitter.vshost.exe"
username="domain\user">
<log4net:message>Log entry 103</log4net:message>
<log4net:properties>
<log4net:data name="log4net:HostName" value="machine" />
</log4net:properties>
</log4net:event>
当尝试 XElement.Parse 或 XDocument.Parse 内容时,它会引发异常:
“log4net”是一个未声明的命名空间。 第 1 行,位置 2。
我知道我可以搜索并替换原始字符串中的“log4net:”并将其删除,从而使我能够成功解析 XML,但是有更好的方法吗? 这是捕获的完整数据(重新格式化以允许读取),没有进行或删除 xml 命名空间声明。
I am try to read the following string, captured from a log4net UdpAppender.
<log4net:event logger="TestingTransmitter.Program"
timestamp="2009-08-02T17:50:18.928+01:00"
level="ERROR"
thread="9"
domain="TestingTransmitter.vshost.exe"
username="domain\user">
<log4net:message>Log entry 103</log4net:message>
<log4net:properties>
<log4net:data name="log4net:HostName" value="machine" />
</log4net:properties>
</log4net:event>
When trying to XElement.Parse or XDocument.Parse the content, it throws an exception:
'log4net' is an undeclared namespace.
Line 1, position 2.
I know I can search and replace "log4net:" in the original string and remove it, allowing me to parse the XML successfully, but is there a better way? This is the complete data captured (reformatted to allow reading), there are no xml namespace declarations made or removed..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先,创建 XmlNamespaceManager 类的实例,并向其中添加命名空间,例如,
要使用这些命名空间映射解析 XML 字符串,请调用以下函数,传递 XmlNamespaceManager 的实例以及您添加到其中的命名空间:
First, create an instance of XmlNamespaceManager class, and add your namespaces to that, e.g.
To parse an XML string using those namespace mappings, call the following function, passing the instance of XmlNamespaceManager with the namespaces you've added to it:
您实际上只有两个选择:
严格来说,您的示例是格式错误的 XML —— XDocument / XElement 无法解析它也就不足为奇了。
You really only have two options:
Strictly speaking, your example is malformed XML -- it's no surprise XDocument / XElement won't parse it.
你可以使用类似的东西:
you can use something like that: