什么是正确的xpath函数来排除节点

时间:2016-05-23 06:58:31

标签: xml dom xpath

我的xpath功能有问题

我想得到" First Row"和#34;第四行"只是,但我希望得到它具有声明的逻辑,

第一个声明是我想要使用具有类" row1"的节点。 其次,我想忽略所有具有类" excludeRow"

的节点

我没有尝试过(开始)而没有(包含(@class," excludeRow"))功能,但仍然无法得到我想要的东西。

这是我的例子

<tr><td>"Header"</td></tr>
<tr class="row1"><td>"First Row"</td><tr>
<tr class="excludeRow1"><td>"Second Row"</td></tr>
<tr class="excludeRow2"><td>"Third Row"</td></tr>
<tr><td>"Fourth Row"</td></tr>
<tr class="excludeRow3"><td>"Fifth Row"</td></tr>

这是我最近的代码,希望有人可以纠正或解决这个问题:D

  1. &#39; // TR [@class =&#34; ROW1&#34;而不是(开始 - (@class,&#39; excludeRow&#39;))]&#39;;
  2. &#39; // tr [not(包含(@class,&#39; excludeRow&#39;))]&#39;;
  3. 此代码没有错误,但结果不是我预期的

    谢谢大家,问候! :d

2 个答案:

答案 0 :(得分:0)

首先,请注意您使用的是无效的html,因为您的第二行未正确关闭。但如果它被正确关闭,以下陈述应该有效:

  1. //tr[@class="row1"]
  2. //tr[not(contains(@class, "excludeRow")) and not(@class="row1") and not(position()=1)]
  3. 第一个语句只选择所有类,其等级为row1

    第二个语句在其class属性中选择不包含excludeRow的所有tr,另外还会排除在第一个语句中选择的行。最后要排除标题行,它会排除第一个元素。

答案 1 :(得分:0)

您应该使用or选择 具有class属性等于'row1'没有{的行{1}}以'excludeRow'开头的属性。但是,这将包括“标题”行。如果您想跳过“标题”,请添加另一个条件以首先跳过class

tr

上面的XPath应该返回两个预期的行“First Row”和“Fourth Row”(参见xpathtester中的演示)