首先,我希望我会被理解。
我有这个:
<item>
<ptr target="X"/>BlahBlah
</item>
我想把它转换成这个:
<li>
<a href="X">Blahblah</a>
</li>
我所能做的就是创造这个:
<xsl:template match="tei:ptr">
<li>
<a>
<xsl:value-of select="parent::node()"/>
</a>
</li>
<xsl:apply-templates/>
</xsl:template>
但结果不是我等待的那个:
<li>
<a>BlahBlah</a>
</li>BlahBlah
我可以更改我想要的元素,但<item>
元素的内容显示两次,我忽略了显示href属性的方式。如果需要,我可以显示我的整个XSL表。
我搜索了stackoverflow而没有结果,也许我只是不知道如何将我的问题写成文字。
有人可以帮忙解释它是如何运作的吗?我知道我对XSLT了解不多,但我正在尝试。
非常感谢您的回答,
的Matthias
答案 0 :(得分:1)
实现这一目标的一种方法是:
<xsl:template match="//item/text()">
<xsl:if test="normalize-space(.) != ''">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="../ptr/@target" />
</xsl:attribute>
<xsl:value-of select="normalize-space(.)" />
</xsl:element>
</li>
</xsl:if>
</xsl:template>
导致
<?xml version="1.0" encoding="UTF-8"?>
<li>
<a href="X">BlahBlah</a>
</li>
如果合适,您可以将//item
替换为item
元素的相对路径。