0

我有如下“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>

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

我试过的是:

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

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

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

4

3 回答 3

1

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

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

var xpath = @"//*[
                contains(
                    translate(@Display_Name
                              ,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                              ,'abcdefghijklmnopqrstuvwxyz'
                    )
                    ,'a'
                )
            ]";
var result = root.SelectNodes(xpath);
于 2016-02-02T12:19:48.003 回答
0

试试下面的 XPath

/ParentNode/ChildNode/@Display_Name

获得两者的结果

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

希望它会帮助你:)

于 2016-02-02T11:44:02.760 回答
0

使用 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);

于 2019-03-11T19:27:10.110 回答