如何將XSLT應用於以下XML,以便〜和$之間的字符串在輸出中變爲紅色。在XML上應用XSLT以獲取格式化(顏色)輸出
當您只有一個包含〜和$的字符串時,以下XSLT工作。當你有多個包含〜和$的字符串時它將不起作用。 信息 我使用了相同的模板DATAC'
我用Java比較字符串。
我可以選擇更改java或XSLT中的代碼。
感謝
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='StyleSheet.xsl'?>
<log >
<rows>
<ID>1</ID>
<DataP>
BookID = UJ2445320A
Qty = 1 ISBN = 45320A
~publishDate = 1/1/2006 $
~Name =Learn XML $
</DataP>
<DataC>
BookID = UJ2445320A
Qty = 1 ISBN = 45320A
~publishDate =2/2/2010$
~Name =Learn XML 1.0 $
</DataC>
</rows>
</log>
XSLT
<xsl:for-each select="rows">
<tr>
<td><xsl:value-of select="ID"/></td>
<xsl:apply-templates select="DataP"/>
<xsl:apply-templates select="DataC"/>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template match="DataP">
<xsl:choose>
<xsl:when test="contains(.,'~')">
<td>
<xsl:value-of select="substring-before(.,'~')"/>
<span style="color:red;"><xsl:value-of select="substring-before(substring-after(.,'~'),'$')"/></span>
<xsl:value-of select="substring-after(.,'$')"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="."/></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Java代碼
StringBuilder sbcp = new StringBuilder();
StringBuilder sbpp = new StringBuilder();
String[] spilt = StringUtils.split(DataC, "|");
String[] spilt2 = StringUtils.split(DataP, "|");
for (int i = 0; i < spilt.length; i++)
{
if(spilt2[i].toString().equals(spilt[i]))
{
sbcp.append(spilt[i]);
sbpp.append(spilt2[i]);
}
else
{
sbcp.append("~").append(spilt[i]).append("$");
sbpp.append("~").append(spilt2[i]).append("$");
}
}
好問題(+1)。查看我的答案以獲取完整的XSLT 1.0解決方案。 :) – 2010-08-16 02:21:23