多个子节点转换为XSL
问题描述:
XML输入如下需要多个子节点转换为XSL
<Address country="USA" countryISO2Code="US">
<Street addr="GH Nagar"/>
<Street addr="Naboor"/>
<Street addr="Besides Al Drive Inn"/>
</Address>
输出响应。
"address": {
"country": "USA",
"countryISO2Code": "US",
"Street1": "GH Nagar" ,
"Street2": "Naboor" ,
"Street3": "Besides Al Drive Inn"
}
任何人都可以提出写xsl为上述请。
答
您可以使用此:
<xsl:output indent="yes" method="text"></xsl:output>
<xsl:template match="Address">
<xsl:text>"address":{</xsl:text>
<xsl:for-each select="@*">
<xsl:value-of select="concat('
"', local-name(.), '": "', ., '",')"/>
</xsl:for-each>
<xsl:for-each select="Street">
<xsl:text>
</xsl:text>
<xsl:value-of select="concat('"',local-name(.), position(), '": "',@addr,'",')"/>
</xsl:for-each>
<xsl:text>
}</xsl:text>
</xsl:template>
输出
"address":{
"country": "USA",
"countryISO2Code": "US",
"Street1": "GH Nagar",
"Street2": "Naboor",
"Street3": "Besides Al Drive Inn",
}
答
它不工作如你所说。你可以请检查下面。我能够获得除“街道”之外的其他值。
要求仅为街道路段建议更改。
我的XSL是
<xsl:for-each select="./Address/Street">
<xsl:text></xsl:text>
<xsl:value-of select="concat('"',local-name(.), position(), '": "',@addr,'",')" />
</xsl:for-each>
的出来说就是
#text": "\"Street1\": \"address1\",\"Street2\": \"address2\",\"Street3\": \"address3\",",
预期输出是
“Street1”: “GH格尔”, “STREET2”: “Naboor” “Street3”:“除了Al Drive Inn”
感谢您的回复。它给了我一些想法继续。但现在我的回复如下 “#text”:“\”Street1 \“= \”address1 \“; \”Street2 \“= \”address2 \“; \”Street3 \“= \”address3 \“; “ 。我想要回复为“Street1”:“address1”,“Street2”:“address2”,“Street3:”address3“。你能帮忙弄到它吗? – user3919353
建议不能很好地工作。 。这我已经做了一些修改,我的问题 – user3919353
我已经更新了答案,按您的修改 – Rupesh