我在为以下情况创建xsl转换时遇到问题:
<text>
<data>
<Object class="CENTRE" Name="Country-1/CENTRE-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
</data>
</text>
在上面的代码片段中,我必须:
我尝试通过replace-all-string中的方法替换子串,但是没有成功。 提前致谢
OutPut xml sholud就像:
<text>
<data>
<Object class="SIDE" Name="Country-1/SIDE-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
</data>
</text>
答案 0 :(得分:1)
试试这个:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Object[@class = 'CENTRE' ]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="class">
<xsl:value-of select="'SIDE'"/>
</xsl:attribute>
<xsl:attribute name="Name">
<xsl:value-of select="concat(substring-before( @Name,'CENTRE' ), 'SIDE', substring-after( @Name, 'CENTRE'))"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将生成以下输出:
<text>
<data>
<Object class="SIDE" Name="Country-1/SIDE-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="LEFT" Name="Country-1/LEFT-1/RTY-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
<Object class="RIGHT" Name="Country-1/RIGHT-1/UIO-1" version="1">
<p name="Map">20</p>
<p name="Required">0</p>
</Object>
</data>
</text>