Я пытаюсь сделать преобразование на каком-либо XML с помощью XSLT.XSLT выбор текста, который содержит сильные теги
Мой xml есть;
<body>
<p>
<a href="http://www.zz.com/abc/z/0/z3970z88-0475-11dz-8603-00144zeabdc1.html#slide0"></a>
Some <strong>strong</strong> text
</p>
</body>
и я хочу преобразовать его;
<body>
<slideshow data-uuid="z3970z88-0475-11dz-8603-00144zeabdc1/>
<p>Some <strong>strong</strong> text</p>
</body>
Что я до сих пор;
<xsl:template match="/body/p[a[substring(@href, string-length(@href) - 6) = '#slide0' and string-length(text()) = 0] and count(*) = 1]">
<xsl:apply-templates select="a" />
<xsl:if test="string-length(text()) > 0">
<p>
<xsl:value-of select="text()"/>
</p>
</xsl:if>
</xsl:template>
<xsl:template match="a[substring(@href, string-length(@href) - 6) = '#slide0' and string-length(text()) = 0]">
<slideshow>
<xsl:attribute name="data-uuid">
<xsl:value-of select="substring-before(substring(@href, string-length(@href) - 47), '.html#slide0')" />
</xsl:attribute>
</xsl:template>
Но это работает только, если текст не имеет детей, такие как <strong>
тег или другой тег <a>
.
У кого-нибудь есть решение, которое подберет все это.
Спасибо за ваш ответ. Однако, похоже, это не делает трюк. Ответ я получаю '
<слайд-шоу данных UUID =«z3970z88-0475-11dz-8603-00144zeabdc1»/> Некоторые сильный текст
' Когда я пытаюсь это только с текстом и без сильного тега это работает (но он работал для этого сценария в моем предыдущем решении). –Вы все еще используете свое первоначальное состояние? Поскольку счетчик (*) не позволит вам совместить тэг p. Зачем нужен этот счет? – cvesters
Спасибо, ты прав, это был счет, который останавливал соответствие. Похоже, что это не было необходимо, так как другие тесты проходили без него. –