代码之家  ›  专栏  ›  技术社区  ›  Paul Fryer

如何将XPath与XElement或LINQ结合使用?

  •  74
  • Paul Fryer  · 技术社区  · 15 年前

    考虑以下XML:

    <response>
      <status_code>200</status_code>
      <status_txt>OK</status_txt>
      <data>
        <url>http://bit.ly/b47LVi</url>
        <hash>b47LVi</hash>
        <global_hash>9EJa3m</global_hash>
        <long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
        <new_hash>0</new_hash>
      </data>
    </response>
    

    <hash> 元素。我试过:

    var hash = xml.Element("hash").Value;
    

    XElement ? 我可以用老一点的 System.Xml 框架,执行以下操作:

    xml.Node("/response/data/hash").Value
    

    在LINQ名称空间中有类似的东西吗?


    更新:

    var hash = xml.Descendants("hash").FirstOrDefault().Value;
    

    我还是有兴趣看看有没有人有更好的解决办法?

    5 回复  |  直到 15 年前
        1
  •  139
  •   Richard    14 年前

    要将XPath与LINQ To XML结合使用,请为 System.Xml.XPath ,这将带来 System.Xml.XPath.Extensions

    var value = (string)xml.XPathEvaluate("/response/data/hash");
    
        2
  •  38
  •   Jon Skeet    15 年前

    其他人则完全合理地建议如何使用“本机”linqtoxml查询来做您想做的事情。

    然而,为了提供更多的选择,考虑 XPathSelectElement , XPathSelectElements XPathEvaluate 根据 XNode X节点 CreateNavigator XPathNavigator 对于一个 .

    就我个人而言,我非常喜欢直接使用linqtoxmlapi,因为我非常喜欢linqapi,但是如果您对XPath更熟悉,以上内容可能会对您有所帮助。

        3
  •  14
  •   bluish dmajkic    13 年前

    var hash = xml.Descendants("hash").FirstOrDefault().Value;
    

    我会像这样崩溃:

    var elements = xml.Descendants("hash");
    var hash = elements.FirstOrDefault();
    
    if(hash != null)
     hash.Value // as hash can be null when default. 
    

    通过这种方式,还可以获得属性、节点和元素等。

    检查这篇文章,以获得关于它的清晰的想法,以便它有帮助。 http://www.codeproject.com/KB/linq/LINQtoXML.aspx 我希望这对你有帮助。

        4
  •  8
  •   panpawel    11 年前

    举个例子:

    XElement xml = XElement.Parse(@"...your xml...");
    XElement hash = xml.Element("data").Element("hash");
    
        5
  •  2
  •   TGH    10 年前

    我尝试提出一个用于生成xpath的LINQesq框架。 它允许您使用c#lambda表达式描述xpath

    var xpath = CreateXpath.Where(e => e.TargetElementName == "td" && e.Parent.Name == "tr");
    
    var xpath = CreateXpath.Where(e => e.TargetElementName == "td").Select(e => e.Text);
    

    不确定这在这种情况下是否有用,但您可以在此处找到文档:

    http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq

    推荐文章