使用xpath选择不在div元素中的所有文本?

时间:2011-03-11 17:04:38

标签: xpath

如何只选择不在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'}

2 个答案:

答案 0 :(得分:0)

//text()[normalize-space()][../node()[not(self::text())]]

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

答案 1 :(得分:0)

使用

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          
        "