Xml 无法使用XSL循环遍历所有元素
我需要处理一段XML,找出所有地址和电话元素并打印出来 我使用的XML和XSL可以在这里找到: 我可以得到所有的地址,但是,我不能得到所有的电话号码。它只打印第一个可用的电话号码 我得到的电流输出是:Xml 无法使用XSL循环遍历所有元素,xml,xslt,Xml,Xslt,我需要处理一段XML,找出所有地址和电话元素并打印出来 我使用的XML和XSL可以在这里找到: 我可以得到所有的地址,但是,我不能得到所有的电话号码。它只打印第一个可用的电话号码 我得到的电流输出是: <person:Party> <party:Address> <add:AddressLine1>101 S PLAZA PL</add:AddressLine1>
<person:Party>
<party:Address>
<add:AddressLine1>101 S PLAZA PL</add:AddressLine1>
<add:AddressTypeCode>Billing Address</add:AddressTypeCode>
<add:City>ABSECON</add:City>
<add:State>NJ</add:State>
<add:PostalCode>08201-1306</add:PostalCode>
</party:Address>
<party:Phone>
<phn:PhoneNumber>952-7041821</phn:PhoneNumber>
<phn:Extension/>
<phn:PhoneType>Billing Phone</phn:PhoneType>
</party:Phone>
<party:Address>
<add:AddressLine1>101 S PLAZA PL</add:AddressLine1>
<add:AddressTypeCode>Home Address</add:AddressTypeCode>
<add:City>ABSECON</add:City>
<add:State>NJ</add:State>
<add:PostalCode>08201-1306</add:PostalCode>
</party:Address>
<party:Phone>
<phn:PhoneNumber>952-7041821</phn:PhoneNumber>
<phn:Extension/>
<phn:PhoneType>Billing Phone</phn:PhoneType>
</party:Phone>
</person:Party>
101 S广场酒店
帐单地址
ABSECON
新泽西州
08201-1306
952-7041821
计费电话
101 S广场酒店
家庭住址
ABSECON
新泽西州
08201-1306
952-7041821
计费电话
在party:phone下面的两个地方都有相同的电话号码和类型。但是我需要打印电话和打字。如下所示:
<person:Party>
<party:Address>
<add:AddressLine1>101 S PLAZA PL</add:AddressLine1>
<add:AddressTypeCode>Billing Address</add:AddressTypeCode>
<add:City>ABSECON</add:City>
<add:State>NJ</add:State>
<add:PostalCode>08201-1306</add:PostalCode>
</party:Address>
<party:Phone>
<phn:PhoneNumber>952-7041821</phn:PhoneNumber>
<phn:Extension/>
<phn:PhoneType>Billing Phone</phn:PhoneType>
</party:Phone>
<party:Address>
<add:AddressLine1>101 S PLAZA PL</add:AddressLine1>
<add:AddressTypeCode>Home Address</add:AddressTypeCode>
<add:City>ABSECON</add:City>
<add:State>NJ</add:State>
<add:PostalCode>08201-1306</add:PostalCode>
</party:Address>
<party:Phone>
<phn:PhoneNumber>952-7041822</phn:PhoneNumber>
<phn:Extension/>
<phn:PhoneType>Home Phone</phn:PhoneType>
</party:Phone>
</person:Party>
101 S广场酒店
帐单地址
ABSECON
新泽西州
08201-1306
952-7041821
计费电话
101 S广场酒店
家庭住址
ABSECON
新泽西州
08201-1306
952-7041822
家庭电话
如果有人能分享如何打印所有电话号码及其各自类型的逻辑,这将非常有帮助。而计费电话
详细信息应位于计费地址
参与方:地址
块下,家庭电话
详细信息也应位于相同的家庭地址
参与方:地址块下
注意:为了方便起见,我在给定的XSL中硬编码了memberId
然而,在实际场景中,我将获取XML中可用的所有memberId,并对其进行相同的逻辑处理,以获取电话号码和类型 考虑这个(非常)简化的示例:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
exclude-result-prefixes="json">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/json:object">
<parties>
<xsl:apply-templates select=".//json:array[@name='contacts']"/>
</parties>
</xsl:template>
<xsl:template match="json:array[@name='contacts']">
<party id="{.//json:string[@name='contactId']}">
<billing>
<xsl:apply-templates select=".//json:array[@name='addresses']/json:object[json:string[@name='addressType']='Billing Address']" mode="address"/>
<xsl:apply-templates select=".//json:array[@name='phones']/json:object[json:string[@name='phoneType']='Billing Phone']" mode="phone"/>
</billing>
<home>
<xsl:apply-templates select=".//json:array[@name='addresses']/json:object[json:string[@name='addressType']='Home Address']" mode="address"/>
<xsl:apply-templates select=".//json:array[@name='phones']/json:object[json:string[@name='phoneType']='Home Phone']" mode="phone"/>
</home>
</party>
</xsl:template>
<xsl:template match="json:object" mode="address">
<address>
<xsl:apply-templates select="json:string"/>
</address>
</xsl:template>
<xsl:template match="json:object" mode="phone">
<phone>
<xsl:apply-templates select="json:string"/>
</phone>
</xsl:template>
<xsl:template match="json:string">
<xsl:element name="{@name}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这是正确的,但结构有点不同。此外,我还有其他需要在同一XSL中完成的事情,因此我现在无法更改XSL。我只是在寻找一个正确的XPATH,以获得预期输出中给出的电话详细信息。我使用的是您提供的XML—我肯定会从该输入中获得所有电话详细信息。更重要的是,我让计费电话跟随计费地址,让家庭电话跟随家庭地址-这对我来说似乎是更困难的问题。