Xpath к тегу внутри CDATA - PullRequest
       1

Xpath к тегу внутри CDATA

0 голосов
/ 09 августа 2011

Я хочу найти xpath для тега, который находится внутри CDATA. Ниже фрагмента xml.

<books>
 <book>
  <title></title>
  <content><![CDATA[<p>Hi hello Hw r u?</p><p>We are fine</p><p>Hi babeeee!!!!</p>]]>    </content>
 </book>
</books>

Я хочу получить данные, которые находятся внутри первого тега <p> внутри <content>. Кто-нибудь может дать правильный xpath к нему?

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

CDATA содержит произвольные символьные данные.В отличие от PCDATA (аббревиатура проанализировал символьные данные) он не анализируется, поэтому в нем нет пути к "элементам".

3 голосов
/ 09 августа 2011

Как сказал Лейф, содержимое в разделе CDATA не анализируется, поэтому это просто текст, даже если он выглядит как разметка. Вы должны разобрать это. Что вы можете сделать, используя Saxon (9.1 или более поздние коммерческие выпуски) и saxon:parse. Затем вы обнаружите, что он плохо сформирован, поэтому вам, вероятно, придется прибегнуть к синтаксическому анализатору, такому как TagSoup , чтобы проанализировать его.

Вы также можете рассматривать это как строку:

<xsl:stylesheet version="1.0"
  xmlns:saxon="http://saxon.sf.net/"
  exclude-result-prefixes="saxon"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Root>
      <!--xsl:value-of select="saxon:parse(/books/book/content)"/-->
      <xsl:for-each select="books/book/content">
        <xsl:value-of select="
          substring-before(
          substring-after( . , '&gt;' ), '&lt;' ) "/>
      </xsl:for-each>
    </Root>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...