我有“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 中所有节点的列表strong>属性。
我尝试的是:
root.SelectNodes("descendant-or-self::*[contains(@DISPLAY_NAME,'end')]")
这里,root包含我的XML,它是 XMLDocument 的对象。
另外,如何通过忽略 Display_Name 来使用小写字母或大写字母来制作此过滤器。
答案 0 :(得分:1)
“我希望在
XMLNodeList
属性中使用"A"
[无论大小或小]的xPath获取C#中Display_Name
中所有节点的列表。” EM>
XML和XPath的本质区分大小写。没有很好的方法可以使用XPath进行不区分大小写的匹配(至少在XPath 1.0中支持.NET的版本)。一种已知的方法是在进行进一步比较之前使用translate()
将Display_Name
值转换为小写,类似这样的内容(请参阅related post):
var xpath = @"//*[
contains(
translate(@Display_Name
,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
,'abcdefghijklmnopqrstuvwxyz'
)
,'a'
)
]";
var result = root.SelectNodes(xpath);
答案 1 :(得分:0)
尝试使用以下XPath
/ParentNode/ChildNode/@Display_Name
获得两者的结果
以上XPath将返回ChildNode的所有结果。现在迭代此XPath以提取所有结果
希望它会对你有所帮助:)。
答案 2 :(得分: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);