多个子节点转换为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('&#xa;&quot;', local-name(.), '&quot;: &quot;', ., '&quot;,')"/> 
    </xsl:for-each> 
     <xsl:for-each select="Street"> 
      <xsl:text>&#xa;</xsl:text> 
      <xsl:value-of select="concat('&quot;',local-name(.), position(), '&quot;: &quot;',@addr,'&quot;,')"/> 
     </xsl:for-each> 
    <xsl:text>&#xa;}</xsl:text> 
</xsl:template> 

输出

"address":{ 
"country": "USA", 
"countryISO2Code": "US", 
"Street1": "GH Nagar", 
"Street2": "Naboor", 
"Street3": "Besides Al Drive Inn", 
} 
+0

感谢您的回复。它给了我一些想法继续。但现在我的回复如下 “#text”:“\”Street1 \“= \”add​​ress1 \“; \”Street2 \“= \”add​​ress2 \“; \”Street3 \“= \”add​​ress3 \“; “ 。我想要回复为“Street1”:“address1”,“Street2”:“address2”,“Street3:”address3“。你能帮忙弄到它吗? – user3919353

+0

建议不能很好地工作。 。这我已经做了一些修改,我的问题 – user3919353

+0

我已经更新了答案,按您的修改 – Rupesh

它不工作如你所说。你可以请检查下面。我能够获得除“街道”之外的其他值。

要求仅为街道路段建议更改。

我的XSL是

<xsl:for-each select="./Address/Street"> 
    <xsl:text></xsl:text> 
    <xsl:value-of select="concat('&quot;',local-name(.), position(), '&quot;: &quot;',@addr,'&quot;,')" /> 
</xsl:for-each> 

的出来说就是

#text": "\"Street1\": \"address1\",\"Street2\": \"address2\",\"Street3\": \"address3\",", 

预期输出是

“Street1”: “GH格尔”, “STREET2”: “Naboor” “Street3”:“除了Al Drive Inn”