我正在尝试使用XSLT对某些XML进行转换。选择包含强标记的文本的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” />有些强文本
'当我只有文字而没有强烈的触杀尝试它的工作原理(但它在我以前的解决方案中用于这种情况)。 –你还在使用你的原始状态吗?因为count(*)会阻止您匹配p标签。为什么需要这个计数? – cvesters
谢谢,你是对的,这是计数停止匹配。似乎没有必要,因为没有它的其他测试通过。 –