在 XDocument 中使用命名空间导航 XML
使用包含命名空间的 XML 时,必须考虑它们对 XDocument 中元素查询的影响。默认情况下,查询 XDocument 元素时不考虑命名空间。这可能会导致意外结果,如提供的示例 XML 中所示:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> <EventID>589828</EventID> <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" /> </System> </E2ETraceEvent>
在此场景中,由于命名空间的存在,以下代码为 xEl1 返回 null:
XDocument xDoc = XDocument.Parse(CurrentString); XElement xEl1 = xDoc.Element("E2ETraceEvent");
解决命名空间问题
要使用命名空间正确导航 XML,请使用X命名空间类。 XNamespace 提供了一种指定名称空间并在查询期间将其与元素名称组合的方法。下面是修改后的代码:
XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system"; XElement xEl2 = xDoc.Element(nsSys + "System");
现在,xEl2 将包含具有指定命名空间的 System 元素。您可以继续类似地导航 XML 树,合并相关的命名空间。
附加说明
以上是如何使用 XDocument 有效地查询带有命名空间的 XML 元素?的详细内容。更多信息请关注PHP中文网其他相关文章!