对于这个XML:
<TopLevel>
<NextLevel Label="(123,456,789)"/>
</TopLevel>
我使用以下XSL块将这三个段解析为三个变量(并将整个标签保留用于其他目的):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text"/>
<xsl:template match="//TopLevel">
<xsl:variable name="LabelAll" select="NextLevel/@Label"/>
<xsl:variable name="Label1" select="substring-before(substring-after($LabelAll,'('),',')"/>
<xsl:variable name="Label2" select="substring-before(substring-after(substring-after($LabelAll,'('),','),',')"/>
<xsl:variable name="Label3" select="substring-before(substring-after(substring-after($LabelAll, ','),','),')')"/>
<xsl:value-of select="$Label1"/><!-- <xsl:text> </xsl:text> -->
<xsl:value-of select="$Label2"/><!-- <xsl:text> </xsl:text> -->
<xsl:value-of select="$Label3"/><!-- <xsl:text> </xsl:text> -->
</xsl:template>
</xsl:stylesheet>
它在两种不同的XSL转换中完美运行。然后我尝试将其添加到另外三个XSL转换中,但在其他转换中,它总是将789
分配给LabelAll
; Label1
,Label2
和Label3
为空。
为了排除故障,我将XML修改为:
<TopLevel>
<NextLevel Label="(123,456,789,ABC,XYZ,PDQ)"/>
</TopLevel>
现在,LabelAll
变为789,ABC,XYZ,PDQ)
,几乎就像子串调用以某种方式相互干扰。
另一种可能性:我使用的转换引擎是一种在后台运行并被触发的服务,可以将多个输出应用于单个源XML。引擎是否可能混合来自不同变换的东西?
谢谢!
答案 0 :(得分:0)
另一种可能性:我使用的转换引擎是一种在后台运行并被触发的服务,可以将多个输出应用于单个源XML。引擎是否可能混合来自不同变换的东西?
是的,如果您错误地调用它并且不考虑线程安全性,则可能。例如,如果您正在使用JAXP并同时在多个线程中使用Transformer对象。
答案 1 :(得分:0)
答案是:还有另一个转换正在制作一个具有相关属性修改值的中间XML。我正在处理的转换由服务配置为使用中间结果XML而不是原始XML。 THX!