【问题标题】:Select all text not in div elements using xpath?使用xpath选择所有不在div元素中的文本?
【发布时间】:2011-07-13 15:44:00
【问题描述】:

如何只选择不在 div 标签中的文本?

例如。

<div>
    <div>not this</div>
    1<br/>
    <div>not this</div>
    1<br/>
    1<br/>
    <div>not this</div>
</div>
<div>
    <div>not this</div>
    2
    <div>not this</div>
    2   
    2   
    <div>not this</div>
</div>
<div>
    <div>not this</div>
    3
    <div>not this</div>
    3   
    3   
    <div>not this</div>
</div>

结果:{'1/n1/n1/n','2 2 2','3 3 3'}

【问题讨论】:

  • 你的意思是不在第二层div?您发布的所有内容都在div
  • 抱歉,是的,不在二级 div 中。谢谢!
  • 好问题,+1。请参阅我的答案以获取一个完整、简短且简单的单行 XPath 表达式,该表达式准确地选择所需的节点。 :)

标签: xpath


【解决方案1】:
//text()[normalize-space()][../node()[not(self::text())]]

含义任何非空白文本节点至少有一个兄弟节点

【讨论】:

    【解决方案2】:

    使用

    div/text()[string-length(normalize-space()) > 0]
    

    当使用提供的 XML 片段的父级作为上下文节点进行评估时,此表达式会选择上下文节点的任何 div 子级的所有非纯空白文本节点子级。

    这里是完整的验证

    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text"/>
    
     <xsl:template match="/*">
      <xsl:for-each select=
       "div/text()[string-length(normalize-space()) > 0]">
        "<xsl:value-of select="."/>"
        <xsl:text>&#xA;</xsl:text>
       </xsl:for-each>
     </xsl:template>
    </xsl:stylesheet>
    

    当此转换应用于提供的 XML 片段时(包装在顶部元素中以成为格式良好的 XML 文档):

    <t>
        <div>
            <div>not this</div>
            1<br/>
            <div>not this</div>
            1<br/>
            1<br/>
            <div>not this</div></div>
        <div>
            <div>not this</div>
            2       
            <div>not this</div>
            2
            2          
            <div>not this</div></div>
        <div>
            <div>not this</div>
            3       
            <div>not this</div>
            3
            3          
            <div>not this</div></div>
    </t>
    

    产生了想要的正确结果:

    "
            1"
    
    
        "
            1"
    
    
        "
            1"
    
    
        "
            2       
            "
    
    
        "
            2
            2          
            "
    
    
        "
            3       
            "
    
    
        "
            3
            3          
            "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多