这是我的XML ..
<rootparent>
<root>
...other nodes here.
...
<parent>
<child id="child_1">
.some other nodes ..
</child>
<child id="child_2">
.some other nodes ..
</child>
...other nodes
</parent>
</root>
</rootparent>
我需要select all the child nodes where id like 'child_%'
使用LINQ to XML。
我得到了这个
的xpathstring xPath="/root/parent/child[id='child_*']";
var x1 =xml.XPathSelectElement(xPath);
var x2 = _sourceDoc.Root.XPathEvaluate(xPath);
但它会返回Enumeration yielded no results
。
答案 0 :(得分:1)
使用xml linq:
string xml =
"<rootparent>" +
"<root>" +
"<parent>" +
"<child id=\"child_1\">" +
"</child>" +
"<child id=\"child_2\">" +
"</child>" +
"</parent" +
"</root>" +
"</rootparent>";
XDocument doc = XDocument.Parse(xml);
List<XElement> children = doc.Descendants("child")
.Where(x => ((string)x.Attribute("id")).StartsWith("child_"))
.ToList();
答案 1 :(得分:0)
对于初学者,您的xpath与XML的结构不匹配。您的查询假设根被称为root
但是有一个rootparent
并且您没有考虑它。由于您只是在寻找child
个节点,因此您甚至不需要引用它,只需查看后代即可。
您需要使用适当的条件。你的孩子都没有包含一个名为child_*
的id元素,所以很自然你不会得到任何结果。使用starts-with
功能并访问id
属性。
//child[starts-with(@id, 'child_')]