首页 文章

XPath:选择空值的标签

提问于
浏览
9

我如何在XPath 1.0中找到空 col name="POW" 的所有行?

<row>
<col name="WOJ">02</col>
<col name="POW"/>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">DOLNOŚLĄSKIE</col>
<col name="NAZDOD">województwo</col>
<col name="STAN_NA">2011-01-01</col>
</row>

我试过很多解决方案 . Firefox扩展XPath Checker选择很少,但 lxml.xpath() 表示表达式无效或只返回没有行 .

我的Python代码:

from lxml import html
f = open('TERC.xml', 'r')
page = html.fromstring(f.read())
for r in page.xpath("//row[col[@name = 'POW' and not(text())]]"):
    print r.text_content()
    print "-------------------------"

3 回答

  • 1
    //row[col[@name='POW' and not(normalize-space())]]
    

    要确保POW列也没有任何子元素(即使它们不包含任何文本),请添加一个额外的谓词过滤器:

    //row[col[@name='POW' and not(normalize-space()) and not(*)]]
    
  • 7

    用这个:

    //row[col[@name = 'POW' and not(text())]]
    
  • 3

    我如何在XPath 1.0中找到空col name =“POW”的所有行?

    有许多可能的“空”定义,并且对于它们中的每一个,都有一个不同的XPath表达式选择“空”元素 .

    空元素的合理定义是:没有子元素且没有文本节点子元素的元素,或者具有单个文本节点子元素的元素,其字符串值仅包含空格字符 .

    This XPath expression

    //row[col[@name = 'POW']
                        [not(*)]
                           [not(normalize-space())]
          ]
    

    选择XML文档中具有 col 子元素的所有 row 元素,其具有字符串值 "POW" 的属性 name 且没有子元素 - 元素且其字符串值完全由空格字符组成,或者为空字符串 .

    In case by "empty" you understand "having no children at all" ,表示没有子元素且没有子节点PI节点且没有子节点注释节点,则使用:

    //row[col[@name = 'POW']
                        [not(node())]
          ]
    

相关问题