XSLT在不同路径上选择第一个非缺失值

时间:2015-06-03 13:09:06

标签: xml xslt

我有一个XML文档:

<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?>
<Document>
    <Person>
        <Name>Joe</Name>
        <Address>
            <Country></Country>
        </Address>
        <Address>
            <Country>FR</Country>
        </Address>
        <Phone>
            <Number>11111111</Number>   
        </Phone>
        <Phone>
            <Number></Number>   
        </Phone>
    </Person>
    <Person>
        <Name>Jim</Name>
        <Address>
            <Country>US</Country>
        </Address>
        <Address>
            <Country>DE</Country>
        </Address>
        <Phone>
            <Number>1234567879</Number> 
        </Phone>
        <Phone>
            <Number>987654321</Number>  
        </Phone>
    </Person>
</Document>

我想要做的是将其转换为这种结构:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <NewDocument>
        <xsl:for-each select="Document/Person" >
            <Person>
                <Name>
                    <xsl:value-of select="Name" />
                </Name>
                <Addresses>
                    <xsl:for-each select="Address" >
                    <Address>
                       <Country>    
                          <xsl:value-of select="Country" />
                       </Country>
                    </Address>
                    </xsl:for-each>
                </Addresses>
                <Phones>
                    <xsl:for-each select="Phone" >
                     <Phone>
                        <Number>    
                           <xsl:value-of select="Number" />
                        </Number>
                        <PhnCtry>
                           <!-- TO DO -->
                        </PhnCtry>
                     </Phone>
                    </xsl:for-each>
                </Phones>
            </Person>
        </xsl:for-each>
        </NewDocument>
    </xsl:template>
</xsl:stylesheet>

我想要的是为每个人填写PhnCtry,其中包含该人的FIRST NON MISSING地址国家/地区。更好的方法是只在不丢失数字时执行此操作。我对XSLT非常陌生,因此非常感谢这里的任何帮助

1 个答案:

答案 0 :(得分:1)

要获取电话的第一个非缺失地址国家/地区,您可以使用此表达式

<xsl:value-of select="../Address/Country[. != ''][1]" />

请注意..获取父节点,因为此时您位于Phone