Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 无法使用XSL循环遍历所有元素_Xml_Xslt - Fatal编程技术网

Xml 无法使用XSL循环遍历所有元素

Xml 无法使用XSL循环遍历所有元素,xml,xslt,Xml,Xslt,我需要处理一段XML,找出所有地址和电话元素并打印出来 我使用的XML和XSL可以在这里找到: 我可以得到所有的地址,但是,我不能得到所有的电话号码。它只打印第一个可用的电话号码 我得到的电流输出是: <person:Party> <party:Address> <add:AddressLine1>101 S PLAZA PL</add:AddressLine1>

我需要处理一段XML,找出所有地址和电话元素并打印出来

我使用的XML和XSL可以在这里找到:

我可以得到所有的地址,但是,我不能得到所有的电话号码。它只打印第一个可用的电话号码

我得到的电流输出是:

<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—我肯定会从该输入中获得所有电话详细信息。更重要的是,我让计费电话跟随计费地址,让家庭电话跟随家庭地址-这对我来说似乎是更困难的问题。