在XPath数组中连接内部文本

本文关键字:内部 文本 连接 XPath 数组 | 更新日期: 2023-09-27 18:11:57

我有一些XML看起来像这样:

<root>
  <instructions type="array">
    <item type="string">Cannot do business directly with consumers</item>
    <item type="string">Cannot marry a martian</item>
  </instructions>
</root>

instructions变量,看起来像这样:

var instructions = myXDocument.XPathSelectElements("/root/instructions").Nodes();

我正在尝试连接所有的item字符串,因此:

"不能和消费者直接做生意,不能和火星人结婚"

,到目前为止我的尝试是

instructions.Select(x => x.[[What do I put here?]]).Aggregate((i,j) => i + ", " + j)

,但有麻烦弄清楚如何从我的lambda表达式中的每个节点获得内部文本。x.ToString()"<item type="string">Cannot do business directly with consumers</item>"

在XPath数组中连接内部文本

使用相同的方法,您可以简单地将Nodes()替换为Elements(),然后访问返回的XElementsValue属性以获取内部文本:

var instructions = myXDocument.XPathSelectElements("/root/instructions").Elements();
var result = instructions.Select(x => x.Value).Aggregate((i,j) => i + ", " + j);

我知道这不是你正在寻找的lambda表达式,但这是获得结果输出的方法。

string result;
XElement root = XElement.Load(SomeXML);
root.Element("root").Elements("instructions").Elements("item").All<XElement>(xe =>
{
    result = result + xe.Attribute("type").Value),
    return true;
});

试试这个

var xml = "<root><instructions type='"array'"><item type='"string'">Cannot do business directly with consumers</item><item type='"string'">Cannot marry a martian</item></instructions></root>";
var document = XDocument.Parse(xml);
var result = string.Join(", ", document.Descendants("instructions").Elements("item").Select(x=>x.Value));
输出:

不能和消费者直接做生意,不能和火星人结婚