我有一个需要处理一段XML并找出所有地址和电话元素并打印出来的要求。
我正在使用的XML和XSL可以在这里找到:http://xsltfiddle.liberty-development.net/ncntCSp/2
我可以获取所有地址,但是,我无法获取所有电话号码。它只会打印第一个可用的电话号码。
我得到的当前输出是:
<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>
在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>
如果有人可以共享如何获取所有电话号码及其相应类型的打印逻辑,这将非常有帮助。并且Billing Phone
的详细信息应位于Billing Address
party:Address
块下,Home Phone
的详细信息也应遵循并位于Home Address
party:Address
块下< / p>
注意:为简便起见,我已在给定<xsl:variable name="memberId" select="'2cd76ea8-825c-432e-af6d-92a133fb8fc0'"/>
的XSL中对memberId进行了硬编码。
但是,在实际情况下,我将获取XML中所有可用的memberId,并对它们进行相同的逻辑处理以获取电话号码和类型。
答案 0 :(得分:0)
考虑以下(非常多)简化示例:
XSLT 1.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>