我有一个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非常陌生,因此非常感谢这里的任何帮助
答案 0 :(得分:1)
要获取电话的第一个非缺失地址国家/地区,您可以使用此表达式
<xsl:value-of select="../Address/Country[. != ''][1]" />
请注意..
获取父节点,因为此时您位于Phone
。