如何编写xpath对于c#.net中tr和td标记的每个循环

时间:2014-04-02 12:44:52

标签: c# xpath

<table>
   <tr>
      <td id="a">
           Battery
      <td id ="b">
          9
   </tr>
   <tr>
       <td id="a">
           Company
       <td id="b">
              APPLE
  </tr>
  <tr>....</tr>

我需要输出像这样的电池:9 ^ Comapany:Apple。我正在学习xpath可以任何人建议我如何做到这一点。

1 个答案:

答案 0 :(得分:3)

使用XPath 2.0,您可以执行以下操作:

fn:string-join(for $tr in //tr return fn:string-join($tr/td/text(),':'), '^')

在您的评论后更新: .NET Framework不直接支持XPath 2.0,我不相信使用1.0可以轻松满足您的要求。您可以查看一些third-party librarie

或者,如果您只是在寻找C#解决方案,那么就不需要在这里使用XPath,LINQ to XML就足够了:

var xDoc = XDocument.Parse(myXmlString);
var result =
   String.Join("^",
               xDoc.Descendants("tr")
                   .Select(tr => String.Join(":",
                                             tr.Elements("td")
                                               .Select(td => td.Value.Trim()))));

最后 - 应该注意的是,这两种方法只适用于正确形成的Xml - 你的不是(td元素没有结束标记)。如果你想处理Html,正如你的样本似乎建议的那样,你可能想要使用一个专门用它来工作的工具,例如: HtmlAgilityPack