gpt4 book ai didi

c# - 通过 XPathSelectElements 获取具有命名空间的 XElement

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:17 28 4
gpt4 key购买 nike

我有一个 XML 例如

    <?xml version="1.0" encoding="utf-8"?>
<A1>
<B2>
<C3 id="1">
<D7>
<E5 id="abc" />
</D7>
<D4 id="1">
<E5 id="abc" />
</D4>
<D4 id="2">
<E5 id="abc" />
</D4>
</C3>
</B2>
</A1>

这是示例代码:

    var xDoc = XDocument.Load("Test.xml");
string xPath = "//B2/C3/D4";
//or string xPath = "//B2/C3/D4[@id='1']";

var eleList = xDoc.XPathSelectElements(xPath).ToList();
foreach (var xElement in eleList)
{
Console.WriteLine(xElement);
}

它工作得很好,但如果我将命名空间添加到根节点 A1,此代码将不起作用。在搜索解决方案时,我找到了 this one ,但它使用 Descendants() 方法来查询 XML。据我了解,如果我正在搜索 ,此解决方案将失败,因为

存在相同的标签

我的要求是搜索某个节点是否存在于特定的 XPath 中。如果有一种方法可以使用 Descendants 来做到这一点,我会很乐意使用它。如果没有,请指导我如何使用 namespace 进行搜索。

如果这是重复的,我深表歉意。

最佳答案

要继续使用 XPath,您可以使用以下链接:

var xDoc = XDocument.Parse(@"<?xml version='1.0' encoding='utf-8'?>
<A1 xmlns='urn:sample'>
<B2>
<C3 id='1'>
<D7><E5 id='abc' /></D7>
<D4 id='1'><E5 id='abc' /></D4>
<D4 id='2'><E5 id='abc' /></D4>
</C3>
</B2>
</A1>");

// Notice this
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("sample", "urn:sample");

string xPath = "//sample:B2/sample:C3/sample:D4";

var eleList = xDoc.XPathSelectElements(xPath, nsmgr).ToList();
foreach (var xElement in eleList)
{
Console.WriteLine(xElement);
}

关于c# - 通过 XPathSelectElements 获取具有命名空间的 XElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19866523/

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