【发布时间】:2017-06-30 09:17:24
【问题描述】:
我有这个 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>
我试试这个,但它不起作用:
<?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>
谁能帮帮我,我该怎么做?
【问题讨论】:
-
如果您只是从模板匹配中删除第一个斜杠,它是否有效? IE。做
<xsl:template match="soapenv:Body/compte/password"> -
Thnx @TimC 不,它不起作用,XSLT 文件是否正确?因为我从来没有用过 XSLT
-
您的 XML 格式不正确:
<compte>和</v1:compte>不匹配。如果compte在命名空间中,那么您的第二个模板将不匹配它。也没有命名空间声明将任一前缀绑定到命名空间 URI。 -
我删除了命名空间
但它不起作用,我认为我的 XSLT 有问题 -
您能否编辑您的问题以显示包含所有命名空间声明的 XML 的完整版本? (即 xmlns:soap="..." 和 xmlns:v1="...")。谢谢!
标签: xml xslt xslt-1.0 xslt-2.0