使用 xPath 和通配符筛选 XMLNodeList

本文关键字:筛选 XMLNodeList 通配符 xPath 使用 | 更新日期: 2023-09-27 18:32:55

我有"XML"如下:

<ParentNode>
    <ChildNode id="1" Display_Name="ABC"/>
    <ChildNode id="2" Display_Name="DEF"/>
    <ChildNode id="3" Display_Name="DAX"/>
    <ChildNode id="4" Display_Name="LAM"/>
    <ChildNode id="5" Display_Name="PKR"/>
    <ChildNode id="6" Display_Name="UYA"/>
</ParentNode>

我想在 C# 中使用 xPath 在 C# 中获取 XMLNodeList 中所有节点的列表,Display_Name属性中具有"A"[无论大写或小写]。

我尝试的是:

root.SelectNodes("descendant-or-self::*[contains(@DISPLAY_NAME,'end')]")

在这里,root包含我的XML,它是XMLDocument的对象。

另外,如何通过忽略小写字母或大写字母Display_Name来制作此过滤器。

使用 xPath 和通配符筛选 XMLNodeList

"我想使用 xPath 在 C# 中获取XMLNodeList中所有节点的列表,Display_Name属性中具有"A"[无论大写或小]。

XML 和 XPath 的性质区分大小写。没有很好的方法可以使用 XPath 进行不区分大小写的匹配(至少在 XPath 1.0 中,.NET 支持的版本)。一种已知的方法是在进行进一步比较之前使用 translate()Display_Name值转换为小写,如下所示(请参阅相关帖子):

var xpath = @"//*[
                contains(
                    translate(@Display_Name
                              ,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                              ,'abcdefghijklmnopqrstuvwxyz'
                    )
                    ,'a'
                )
            ]";
var result = root.SelectNodes(xpath);

尝试使用以下XPath

/ParentNode/ChildNode/@Display_Name

获得两者的结果

上面的XPath将返回ChildNode的所有结果。现在迭代此 XPath 以提取所有结果

希望它能帮助你:)

Use OuterXml 方法。

试试这个:

//Load Data     
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
//Go the xPath
XmlNode titleNode = xmlDoc.SelectSingleNode(xPath);
//Get the OutXml (You dont need to use a new variable)
string nodeValue = titleNode.OuterXml;
//Load this string as a new XmlDocument and use the second xPath
XmlDocument xmlDoc2 = new XmlDocument();
xmlDoc2.LoadXml(nodeValue);
titleNode = xmlDoc.SelectSingleNode(xPath2);