【问题标题】:How can i find XElement using linq我如何使用 linq 找到 XElement
【发布时间】:2009-07-25 13:34:14
【问题描述】:

我正在使用 c#。

<Tüberkiloz>
    <Kod>
      1000
    </Kod>
  </Tüberkiloz>
  <Tifo>
    <Kod>
      1001
    </Kod>
  </Tifo>
  <Bakteriyel_Endokardit>
    <Kod>
      1002
    </Kod>
  </Bakteriyel_Endokardit>

这是我的 xml。我想带Tifo。我必须使用“Kod”节点。例如 XpathSelectelement("Kod").value = 1001

【问题讨论】:

  • 这只是您的 XML 文档的摘录吗?如果没有,您需要一个包含整个文档的根元素。

标签: c# xml linq


【解决方案1】:

假设每个元素都有一个&lt;Kod&gt; 元素,并且它们都包含有效整数,您可以使用:

var doc = XDocument.Parse(@"
    <root>
    <Tüberkiloz>
        <Kod>1000</Kod>
    </Tüberkiloz>
    <Tifo>
      <Kod>1001</Kod>
    </Tifo>
    <Bakteriyel_Endokardit>
      <Kod>1002</Kod>
    </Bakteriyel_Endokardit>
    </root>");

var matches = from el in doc.Root.Elements()
              where (int)(el.Element("Kod")) == 1001
              select el;

【讨论】:

    【解决方案2】:

    这行得通吗?

    XElement root = XElement.Parse("...");
    var tifo = (
        from kod in root.Descendants("Kod")
        where kod.Value == "1001"
        select kod.Parent
        ).First();
    

    【讨论】:

    • 尝试选择 kod 而不是 kod.Parent - 仍然为空?如果查询不匹配任何内容,First() 应该抛出异常,所以看到返回空值我会感到非常惊讶......
    【解决方案3】:

    这将为您提供具有与 Kod 元素匹配的值的 XElement 集合...

    var doc = XDocument.Parse(@"
                    <root>
                    <Tüberkiloz>
                        <Kod>1000</Kod>
                    </Tüberkiloz>
                    <Tifo>
                      <Kod>1001</Kod>
                    </Tifo>
                    <Bakteriyel_Endokardit>
                      <Kod>1002</Kod>
                    </Bakteriyel_Endokardit>
                    </root>");
    
    var matchingElements = doc.XPathSelectElements("root/*[./Kod/text() = '1001']");  
    

    您可以只使用 XPath 语句中的值,在本例中为 1001。dahlbyk 的答案和 Thorarin 的答案都应该可以正常工作(除非您已经将值作为 int 而不需要强制转换,我只想比较一下)。

    我只是想发布一个简单的单行解决方案来提供选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多