在xpath脚本中,如何验证HTML属性的缺失?

时间:2018-01-24 07:08:44

标签: html xml xpath

<div id="columnmain">
    <h3 class="toggler atStart">
      ....
    <h3 class="toggler atStart" id="H4">
      ....
    <h3 class="toggler atStart" id="H0001">
      ....
    <h3 class="toggler atStart" id="H0000">
      ....
</div>

从xml脚本中获取第一个xpath值时,我写了以下内容:

<children>
    <childrenExpression>
        <expression>//div[@id='columnmain']/h3[@class='toggler atStart']/a</expression>
        <href>./@href</href>
        <values>
            <report.url>./@href</report.url>
            <report.title>./text()</report.title>
        </values>
    </childrenExpression>
</children>

并且用于获取其余标记:

<children>
    <childrenExpression>
        <expression>//div[@id='columnmain']/h3[@id='H4']/a</expression>
        <href>./@href</href>
        <values>
            <report.url>./@href</report.url>
            <report.title>./text()</report.title>
        </values>
    </childrenExpression>
</children>

<children>
   <childrenExpression>
       <expression>//div[@id='columnmain']/h3[@id='H0000']/a</expression>
            <href>./@href</href>
            <values>
                <report.url>./@href</report.url>
                <report.title>./text()</report.title>
            </values>
    </childrenExpression>
</children>

<children>
   <childrenExpression>
       <expression>//div[@id='columnmain']/h3[@id='H0001']/a</expression>
            <href>./@href</href>
            <values>
                <report.url>./@href</report.url>
                <report.title>./text()</report.title>
            </values>
    </childrenExpression>
</children>

但是当我使用类名获取第一个<h3>时,还会获取所有其余标记,即在第一个案例中总共提取了4个标记。 因此,如果我想使用检查类名来获取第一个标记,并包括检查缺少id的条件。我应该在<expression>标签中写什么。

2 个答案:

答案 0 :(得分:3)

您可以在not(@id)的谓词表达式中添加h3,以使用h3属性过滤掉id元素:

//div[@id='columnmain']/h3[@class='toggler atStart' and not(@id)]/a

答案 1 :(得分:0)

在谓词中使用fn:empty

h3[ @class = 'toggler atStart' ][ empty(@id) ]

如果输入序列为空,empty(seq)函数返回true,在这种情况下:如果没有id属性