Выделить весь текст не в элементах div, используя xpath? - PullRequest
1 голос
/ 11 марта 2011

как выбрать только текст, который не входит в теги 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 голосов
/ 12 марта 2011

Используйте

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          
        "
0 голосов
/ 11 марта 2011
//text()[normalize-space()][../node()[not(self::text())]]

Значение : любой текстовый узел, не содержащий пробелов, имеющий хотя бы один родственный узел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...