c#中的字符串连接xpath中的多个属性值

本文关键字:属性 连接 字符串 xpath | 更新日期: 2023-09-27 18:17:14

是否存在可用于连接多个属性值并与XPathNavigator一起使用的xpath表达式?评价

    <root>
      <node class="string"></node>
      <node class="join"></node>
    </root>
    XPathNavigator.Evaluate(<expression>) 
    should return a string with value string;join

谢谢。

c#中的字符串连接xpath中的多个属性值

这样的内容应该是可以的:

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

XPath 2.0中有一个更好的选择,使用string-join,但不确定它是否在。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);