【问题标题】:Linq to xml - XDocument - How to read nested nodesLinq to xml - XDocument - 如何读取嵌套节点
【发布时间】:2013-12-01 05:12:40
【问题描述】:

我有以下 xml,我的目标是对于给定的 ProductName(例如 Spot)和给定的语言(例如“en-gb”)我想要所有翻译。所以在这种情况下(ProductName=Spot and language="en-gb")输出应该是 TRADE STATUS, TRADE ID, VALUE DATE

我尝试了下面的 linq 查询,但它打印了“ProductType=Spot”的所有翻译,而不是 ProductType=Spot 和 language="en-gb" 的所有翻译

    var qry = doc.Descendants("Product")
    .Where(p => p.Attribute("ProductName").Value == "Spot")
    .Where(p =>   
   p.Element("Fields")
 .Element("Field")
.Element("Translations")
.Element("Translation")
.Attribute("language")
.Value == "en-gb")
.Select(p => new { Text = p.Value });

如果有人可以为上述目标建议 linq 查询,那就太好了。

<?xml version="1.0" encoding="utf-8" ?>
<Products>
  <Product ProductName="Spot">
    <Fields>
      <Field FieldName="tradeStatus">
        <Translations>
          <Translation language="en-gb">TRADE STATUS</Translation>
          <Translation language="fr-fr">fr_TRADE STATUS</Translation>
          <Translation language="cz-cz">cz_TRADE STATUS</Translation>
        </Translations>
      </Field>
      <Field FieldName="tradeId">
        <Translations>
          <Translation language="en-gb">TRADE ID</Translation>
          <Translation language="fr-fr">fr_TRADEid</Translation>
          <Translation language="cz-cz">cz_TRADEid</Translation>
        </Translations>
      </Field>    
      <Field FieldName="valueDate">
        <Translations>
          <Translation language="en-gb">VALUE DATE</Translation>
          <Translation language="fr-fr">fr_ValueDate</Translation>
          <Translation language="cz-cz">cz_ValueDt</Translation>
        </Translations>
      </Field>    
    </Fields>
  </Product>
  <Product ProductName="Forward">
    <Fields>
      <Field FieldName="dealtRate">
        <Translations>
          <Translation language="en-gb">DEALT RATE</Translation>
          <Translation language="fr-fr">fr_dealtrt</Translation>
          <Translation language="cz-cz">cz_dr</Translation>
        </Translations>
      </Field>
      <Field FieldName="dealtAmount">
        <Translations>
          <Translation language="en-gb">DEALT AMOUNT</Translation>
          <Translation language="fr-fr">fr_dAmtt</Translation>
          <Translation language="cz-cz">cz_dealtAmtt</Translation>
        </Translations>
      </Field>      
    </Fields>
  </Product>

</Products>

【问题讨论】:

    标签: nested linq-to-xml


    【解决方案1】:

    我找到了我自己的问题的答案,下面的 linq 查询有效

    var qry = doc.Descendants("Product")
        .Where(p=>p.Attribute("ProductName").Value=="Spot").Descendants("Fields").Descendants("Translations").Descendants("Translation")
        .Where(t => t.Attribute("language").Value == "en-gb")
        .Select(t => new { Text = t.Value });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多