gpt4 book ai didi

c# - 包含 namespace 的 XML 元素的 XDocument 或 XElement 解析

转载 作者:可可西里 更新时间:2023-11-01 03:14:38 25 4
gpt4 key购买 nike

我尝试读取从 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' is an undeclared namespace. Line 1, position 2.

我知道我可以搜索并替换原始字符串中的“log4net:”并将其删除,这样我就可以成功解析 XML,但有没有更好的方法?这是捕获的完整数据(重新格式化以供阅读),没有创建或删除 xml 命名空间声明。

最佳答案

首先,创建一个 XmlNamespaceManager 类的实例,然后将您的命名空间添加到其中,例如

    XmlNamespaceManager mngr = new XmlNamespaceManager( new NameTable() );
mngr.AddNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
mngr.AddNamespace( "xsd", "http://www.w3.org/2001/XMLSchema" );

要使用这些命名空间映射解析 XML 字符串,请调用以下函数,将 XmlNamespaceManager 的实例与您添加到其中的命名空间一起传递:

/// <summary>Same as XElement.Parse(), but supports XML namespaces.</summary>
/// <param name="strXml">A String that contains XML.</param>
/// <param name="mngr">The XmlNamespaceManager to use for looking up namespace information.</param>
/// <returns>An XElement populated from the string that contains XML.</returns>
public static XElement ParseElement( string strXml, XmlNamespaceManager mngr )
{
XmlParserContext parserContext = new XmlParserContext( null, mngr, null, XmlSpace.None );
XmlTextReader txtReader = new XmlTextReader( strXml, XmlNodeType.Element, parserContext );
return XElement.Load( txtReader );
}

关于c# - 包含 namespace 的 XML 元素的 XDocument 或 XElement 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com