是否有一个xpath表达式可用于连接多个属性值并与XPathNavigator.Evaluate一起使用
<root>
<node class="string"></node>
<node class="join"></node>
</root>
XPathNavigator.Evaluate(<expression>)
should return a string with value string;join
感谢。
答案 0 :(得分:0)
这样的事情应该没问题:
var document = XDocument.Parse(s);
var res = (document.Root.XPathEvaluate("/root/node/@class") as IEnumerable).Cast<XAttribute>().Aggregate("", (a, c) => a + ";" + c.Value);
res = res.Substring(1);
使用 string-join 在 XPath 2.0 中有更好的选择,但不确定它是否已在.Net中实现...
编辑:否则动态构建XPath表达式:
int count = (document.Root.XPathEvaluate("/root/node") as IEnumerable).Cast<XNode>().Count();
string xpath = "concat(";
for (int i = 1; i <= count; ++i)
{
xpath += "/root/node[" + i + "]/@class";
if (i < count)
{
xpath += ", ';',";
}
else
{
xpath += ")";
}
}
var res = document.Root.XPathEvaluate(xpath);