我正在尝试编写一个Linq查询,该查询将解析我的XML树(实际上是被解构为XML树的SQL)。

我的XML看起来像这样

<SqlRoot>
  <SqlStatement>
    <Clause>
      <OtherKeyword>select</OtherKeyword>
      <WhiteSpace></WhiteSpace>
      <Other>t1</Other>
      <Period>.</Period>
      <Other>empid</Other>
      <WhiteSpace></WhiteSpace>
    </Clause>
    <Clause>
      <OtherKeyword>from</OtherKeyword>
      <SelectionTarget>
        <WhiteSpace></WhiteSpace>
        <Other>bd_orm</Other>
        <Period>.</Period>
        <Other>dbo</Other>
        <Period>.</Period>
        <Other>bal_impacts_t</Other>
        <WhiteSpace></WhiteSpace>
        <Other>t1</Other>
      </SelectionTarget>
    </Clause>
  </SqlStatement>
</SqlRoot>


我正在尝试选择表名称(SelectionTarget节点)。 WhiteSpace节点是两个值之间的空白/空白。

所以我期望的输出是这样的bd_orm.dbo.bal_impacts_t t1,但是我无法通过在两者之间加入whitespace来弄清楚该如何做。

我试过了

 var xxx = (from res in xDoc.Descendants("Clause").Descendants("SelectionTarget") select res);

Console.WriteLine(xxx.DescendantNodesAndSelf().OfType<XElement>().First().Value);


但是它显然失败了,因为我不知道如何考虑whitespace节点并将其转换为实际的whitespace。有什么建议么?

最佳答案

只需为WhiteSpace节点选择一个空格,并为所有其他节点选择字符串值,然后将结果串联:

var parts = doc.Descendants("SelectionTarget")
    .Elements()
    .Select(e => e.Name == "WhiteSpace" ? " " : (string)e);

var text = string.Concat(parts);

关于c# - 使用LINQ使用格式读取XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30773483/

10-10 04:48