XPath语法以使查询排除某些特定元素

您可以在https://sabbiobet.netsons.org/test.html上找到我的测试html页面

这是页面的html标记:

<table border="1" class="class_table">
    <tbody>
        <tr class="class_tr">
            <td class="class_td">&nbsp;</td>
        </tr>
        <tr class="class_tr">
            <td class="class_td"><span class="class_span_ok"></span>square</td>
        </tr>
        <tr class="class_tr">
            <td class="class_td"><span class="class_span_ko"></span>circle</td>
        </tr>
        <tr class="class_tr">
            <td class="class_td"><span class="class_span_ok"></span>triangle</td>
        </tr>
    </tbody>
</table>

我需要获取<td>class="class_td"中的所有文本,减去文本为空或&nbsp;或孩子<span>中带有{{1}的文本}。

换句话说,我只想获得这些值:

class="class_ko"

使用Google表格的importXML函数,并按照我尝试过的其他用户的建议进行操作:

Square
Triangle

但是它只有在我在“ span”和“ / span”之间放置一些文本时才有效

没有任何文字,我只会得到一个空的结果。

有人可以帮我吗?

hotdog33 回答:XPath语法以使查询排除某些特定元素

如果将提供的格式不正确的文档更正,请用等价的字符实体引用>>> step_1 ['Gourds','watermelon','Post','pounder','calf','hay','or','duck','is','tool','shed','horse','In','eggplant','quonset','grain','bins','trucks','pole','with','fences','gates','zucchini','carrots','scrap','metal','Peacocks','baa','ostriches','owls','Kidney','beans','ostrich','Gourds','utters','at','welding','equipment','a','oink','haybine','Apples','ducks','straw','quail','donkey','hook','cucumbers','Combine','Harvester','swather','baler','as','parsley','melon','in','ha.\n'] 替换未定义的实体&nbsp;

&#xA0;

然后这个XPath表达式

<table border="1" class="class_table"> <tbody> <tr class="class_tr"> <td class="class_td">&#xA0;</td> </tr> <tr class="class_tr"> <td class="class_td"><span class="class_span_ok"></span>square</td> </tr> <tr class="class_tr"> <td class="class_td"><span class="class_span_ko"></span>circle</td> </tr> <tr class="class_tr"> <td class="class_td"><span class="class_span_ok"></span>triangle</td> </tr> </tbody> </table>

在评估时,会精确选择所需的/*/*/*/td [@class='class_td' and not(span[@class='class_span_ko']) and normalize-space(translate(.,'&#xA0;','')) ]/> 元素

td

基于XSLT的验证

此转换对上面的XPath表达式求值,并将所选元素复制到输出:

<td class="class_td">
   <span class="class_span_ok"/>square</td>
<td class="class_td">
   <span class="class_span_ok"/>triangle</td>

产生了所需的正确结果:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:copy-of select=
    "/*/*/*/td
        [@class='class_td'
        and not(span[@class='class_span_ko'])
        and normalize-space(translate(.,''))
        ]"/>
  </xsl:template>
</xsl:stylesheet>

注意

如果仅需要所需元素的字符串值,则XPath表达式可以是:

<td class="class_td">
   <span class="class_span_ok"/>square</td>
<td class="class_td">
   <span class="class_span_ok"/>triangle</td>
本文链接:https://www.f2er.com/3087209.html

大家都在问