如何使用XSLT

时间:2016-10-27 15:37:21

标签: xslt

我有一个xml我想修改如下

我想将文本插入指定节点

XML

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                             wsu:Id="UsernameToken-80842">
            <wsse:Username>test</wsse:Username>
            <wsse:Password>password</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </soap:Header>

我可以使用什么XSLT将值插入wsse:Password节点,例如。所以它是

 <wsse:Password Type="blabla">password</wsse:Password>

如何使用xslt执行此操作?

1 个答案:

答案 0 :(得分:0)

示例中的XSLT 1.0(照顾您的命名空间):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    version="1.0">

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="wsse:Password">
        <xsl:copy>
            <xsl:text>abc</xsl:text>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

<强>结果

<?xml version="1.0" encoding="UTF-8"?><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-80842">
        <wsse:Username>test</wsse:Username>
        <wsse:Password>abc</wsse:Password>
    </wsse:UsernameToken>
</wsse:Security>

编辑1:

  

<wsse:Password Type="blabla">password</wsse:Password>

有一些不同的方法来创建属性:

<强>我

<xsl:template match="wsse:Password">
    <xsl:copy>
        <xsl:attribute name="Type">
            <!--
                <xsl:text></xsl:text>
                <xsl:value-of select="..."/>
                <xsl:apply-templates select="..."/>
            -->
        </xsl:attribute>
        <xsl:value-of select="."/>
    </xsl:copy>
</xsl:template>

<强> II。

<xsl:template match="wsse:Password">
    <wsse:Password Type="{concat('ab', 'cd')}">
        <xsl:apply-templates/>
    </wsse:Password>
</xsl:template>

第二部分:如果你想为你的属性“type”使用xpath,你必须使用{},否则你有一个consant字符串值,你可以像Type="world"一样写。