如何使用xsl操作包含xml的变量

时间:2012-10-31 09:09:03

标签: xslt xslt-1.0

我要求xsl变量包含xml。

<xsl:variable name="file" select="document('abc.xml')"/>

abc.xml只是一些示例xml <a>1<b>2</b>3</a>

现在我必须修改/添加变量$ file的元素,并将结果分配给另一个变量..

我的输入将是

<Service name="CBI" detailedLog="false">
    <PolicyRules type="default">
        <EndPoints>
            <EndPoint source="Src" target="ET" serviceoperation="AV01">
                <Url>http://firstbackend.com</Url>
            </EndPoint>
            <EndPoint source="Src" target="ET" serviceoperation="PV01">
                <Url>http://secondbackend</Url>
            </EndPoint>
        </EndPoints>
    </PolicyRules>
</Service>

我必须和$ file一起获取标签。我需要以下输出..

<a>1<b>2</b>
<Url>http://firstbackend.com</Url>
<Url>http://secondbackend</Url>
3</a>

有人可以帮助我吗

1 个答案:

答案 0 :(得分:1)

将主输入文档存储到全局变量中,例如

<xsl:variable name="main-doc" select="/"/>

然后为要转换的元素编写模板,例如

<xsl:template match="a">
  <xsl:copy>
    <xsl:copy-of select="b | b/preceding-sibling::node()"/>
    <xsl:copy-of select="$main-doc//Url"/>
    <xsl:copy-of select="b/following-sibling::node()"/>
  </xsl:copy>
</xsl:template>

然后应用模板并存储在变量中(如果需要),例如

<xsl:variable name="rtf1">
  <xsl:apply-templates select="$file/node()"/>
</xsl:variable>

然后使用该变量输出结果,例如

  <xsl:template match="/">
    <xsl:copy-of select="$rtf1"/>
  </xsl:template>