首先,我将提供我已有的代码。 XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getUserDataResponse xmlns="http://wtp">
<getUserDataReturn>Matt</getUserDataReturn>
<getUserDataReturn>NY</getUserDataReturn>
</getUserDataResponse>
</soapenv:Body>
</soapenv:Envelope>
我的XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope">
<xsl:output method="xml" omit-xml-declaration="no" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getUserDataResponse xmlns="http://wtp">
<xsl:for-each select="soapenv:Envelope/soapenv:Body/soapenv:getUserDataResponse/soapenv:getUserDataReturn">
<xsl:value-of select="." />
</xsl:for-each>
</getUserDataResponse>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
我想要实现的只是提取数组的第一个元素,在这种情况下是字符串&#34; Matt,然后把它当作常规响应将其发送到另一个端点&#34; 。我不知道什么是不正确的。
我希望输出:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getUserDataResponse xmlns="http://wtp">
<getUserDataReturn>Matt</getUserDataReturn>
</getUserDataResponse>
</soapenv:Body>
</soapenv:Envelope>
我现在得到的输出只是没有数据的肥皂模板。
如果有人可以提供帮助,我将非常感激:)
干杯!
答案 0 :(得分:0)
您可以使用以下方式实现所需的输出:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wtp="http://wtp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="wtp:getUserDataResponse">
<xsl:copy>
<xsl:apply-templates select="wtp:getUserDataReturn[1]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
要按照你开始的方式去做,你必须这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wtp="http://wtp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getUserDataResponse xmlns="http://wtp">
<getUserDataReturn>
<xsl:value-of select="soapenv:Envelope/soapenv:Body/wtp:getUserDataResponse/wtp:getUserDataReturn[1]" />
</getUserDataReturn>
</getUserDataResponse>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
请注意使用前缀来选择默认"http://wtp"
命名空间中的元素。