我试图在 xslt 的帮助下转换 xml,同时通过读取规则文件在 java 的帮助下生成 xslt。
假设 Xml 是这样的。
<root>
<p> This is <span>India</span> & is <span>tolerant</span> enough to <span>live</span>normal black here</p>
<p> Well <span>Pakistan</span> ,<span>Srilanka</span>, <span>Bangladesh</span>,<span>China</span> is our neighbouring country</p>
</root>
我希望第一个 p 的第一个跨度为绿色,第二个跨度未映射,因此为普通黑色,第三个跨度为蓝色。
同样,可以有更多的“否”。内联元素可能会出现并且有不同的规则。
类似地,第二个“p”对于不同的内联元素将有不同的规则。我如何在 xslt 中区分和应用此规则?
Java读取规则文件并动态准备xslt?
有人可以建议如何做到这一点吗?
最佳答案
您可以做的是拥有一系列模板,并在条件匹配中包含各种规则。例如
<xsl:template match="p/span[1]">
<span style="color:red">
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
<xsl:template match="p/span[2]">
<span style="color:blue">
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
<xsl:template match="p/span[position() > 2]">
<span style="color:green">
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
或者,在匹配 span
标记的情况下,您可以将它们全部合并到一个模板中,并使用 xsl:choose
代替。
<xsl:template match="p/span">
<xsl:variable name="position">
<xsl:number />
</xsl:variable>
<xsl:variable name="colour">
<xsl:choose>
<xsl:when test="$position = 1">red</xsl:when>
<xsl:when test="$position = 2">green</xsl:when>
<xsl:otherwise>blue</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<span style="color:{$colour}">
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
初学者尝试一下这个 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="p/span">
<xsl:variable name="position">
<xsl:number />
</xsl:variable>
<xsl:variable name="colour">
<xsl:choose>
<xsl:when test="$position = 1">red</xsl:when>
<xsl:when test="$position = 2">green</xsl:when>
<xsl:otherwise>blue</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<span style="color:{$colour}">
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
关于java - 如何对 XSLT 中节点的内联元素应用不同的规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35291311/