我有一个元素t
,其中包含可选属性hangText
和anchor
。我试图使用推送技术来处理这个问题,如果可能的话。
目标是翻译这个:
<root>
<t>This is a normal paragraph.</t>
<t hangText="Sometimes hanging text is needed">in paragraphs.</t>
<t anchor="p3">Sometimes an anchor is included.</t>
</root>
到此Markdown输出:
This is a normal paragraph **Sometimes hanging text is needed** in paragraphs. Sometimes an anchor is included.
我尝试创建一个匹配<t>
的样式表,然后分别匹配属性,但显然还不对。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" />
<xsl:strip-space elements="*"/>
<xsl:template match="t">
<xsl:apply-templates />
<xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="@hangText">
<xsl:text>**</xsl:text>
<xsl:apply-templates />
<xsl:text>** </xsl:text>
</xsl:template>
<xsl:template match="@anchor">
<xsl:element name="a">
<xsl:attribute name="name">
<xsl:apply-templates />
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
This is a normal paragraph in paragraphs. Sometimes an anchor is included.
我可以使用几种模式匹配<t>
+属性的每种可能组合,但这会产生犯罪行为,并且无法使用其他属性进行扩展。
答案 0 :(得分:0)
感谢Martin的评论,我修复了XLST,如下:
(欢迎评论是否有更好的输出锚元素的方法)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" />
<xsl:strip-space elements="*"/>
<xsl:template match="t">
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
<xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="t/@hangText">
<xsl:text>**</xsl:text>
<xsl:value-of select="." />
<xsl:text>** </xsl:text>
</xsl:template>
<xsl:template match="t/@anchor">
<xsl:text><a name="</xsl:text>
<xsl:value-of select="."></xsl:value-of>
<xsl:text>"><a></xsl:text>
</xsl:template>
</xsl:stylesheet>
我还在匹配语句中添加了t/
,仅将这些属性作为<t>
的一部分进行匹配。
从技术上讲,它会输出一个我不期待的最终换行符,但我可以忍受。它不会影响Markdown的呈现方式。