2

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

    <root>
      <node class="string"></node>
      <node class="join"></node>
    </root>

    XPathNavigator.Evaluate(<expression>) 
    should return a string with value string;join

谢谢。

4

1 回答 1

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

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);
于 2013-06-06T23:54:09.500 回答