我在下面输入了XML。
<Body>
<AddressInfo>
<Address>
<PIN>123</PIN>
<Street>CAN</Street>
</Address>
<Address>
<PIN>456</PIN>
<Street>MAN</Street>
</Address>
</AddressInfo>
</Body>
我的预期输出是
<SOAPENV>
<Header/>
<ResponseBody>
<AddressDetails>
<UserPIN>123</UserPIN>
<UserStreet>CAN</UserStreet>
</AddressDetails>
<AddressDetails>
<UserPIN>456</UserPIN>
<UserStreet>MAN</UserStreet>
</AddressDetails>
</ResponseBody>
</SOAPENV>
我的问题是当我提供XPATH并从XML中提取值并尝试填充输出时。我总是只获得第一个节点集。其他节点集将被忽略。如何在输出soap信封中填充多个节点集。
答案 0 :(得分:0)
您可以使用以下样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="Body">
<SOAPENV>
<Header/>
<ResponseBody>
<xsl:apply-templates select="@*|node()" />
</ResponseBody>
</SOAPENV>
</xsl:template>
<xsl:template match="Address">
<AddressDetails>
<UserPIN><xsl:value-of select="PIN" /></UserPIN>
<UserStreet><xsl:value-of select="Street" /></UserStreet>
</AddressDetails>
</xsl:template>
</xsl:stylesheet>
如果您不想记下AddressDetails
下面的所有元素,并且所有这些元素都需要前面的文字User
,那么您可以使用xsl:for-each
这样的循环:< / p>
<xsl:template match="Address">
<AddressDetails>
<xsl:for-each select="*">
<xsl:element name="User{name()}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</AddressDetails>
</xsl:template>
只需用另一个模板替换另一个模板。