2017-06-30 23 views
0

我有这样的XML请求:XSLT丰富文本XML

<soapenv:Body> 
     <compte> 
     <login>Lilian00</login> 
     **<password>?</password>** 
     <name>Lilian</name> 
     </v1:compte> 
</soapenv:Body> 

我想用XSLT来丰富<password>?</password>申请,得到这样的结果:

<soapenv:Body> 
     <compte> 
     <login>Lilian00</login> 
     **<password>admin</password>** 
     <name>Lilian</name> 
     </v1:compte> 
</soapenv:Body> 

我尝试这一点,但它多申't work:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    > 
    <xsl:param name="password" /> 


    <xsl:output encoding="UTF-8" indent="yes" /> 

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

    <xsl:template match="/soapenv:Body/compte/password"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
     <xsl:value-of select="$password" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

任何人都可以帮助我,请问我该怎么办?

+0

请问如果单纯从模板匹配删除第一个斜杠工作?即。做'' –

+0

Thnx @TimC不,它不起作用,XSLT文件是否正确?因为我从未使用过XSLT – Lilian

+0

您的XML格式不正确:''和''不匹配。如果'compte'在命名空间中,那么你的第二个模板将不会匹配它。也没有将任何前缀绑定到名称空间URI的名称空间声明。 –

回答

0

对我的作品有小的调整:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    > 
    <xsl:output encoding="UTF-8" indent="yes" /> 

    <xsl:variable name="password" select="'foo'"/> 

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

    <xsl:template match="/soapenv:Body/compte/password"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | ./*"/> 
      <xsl:value-of select="$password" /> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

小提琴:http://xsltransform.net/jxDigU7