我非常感谢能帮助解决我的问题。
请帮助我在网上寻找工作或类似的例子,但找不到任何东西。
我已收到以下xml导入我们的系统:
<Address addressOrg="Import">
<Name>Sams Shop</Name>
<AddressOrg>01 Red Road</AddressOrg>
<AddressOrg>Summer Town</AddressOrg>
<City></City>
<Province></Province>
<Postcode></Postcode>
<Country>
<CountryCode></CountryCode>
</Country>
<AccountNumber></AccountNumber>
</Address>
<Address addressOrg="Exporter">
<Name>PToms Shop</Name>
<AddressOrg>01 Blue Road</AddressOrg>
<AddressOrg>Snow Town</AddressOrg>
<City></City>
<Province></Province>
<Postcode></Postcode>
<Country>
<CountryCode></CountryCode>
</Country>
<AccountNumber></AccountNumber>
</Address>
我正在尝试完成下面的xslt:
<OrgsAddressCollection>
<OrganizationAddress>
<AddressType>ConsigneeDeliveryAddress</AddressType>
<Address1><xsl:value-of select="Address/AddressOrg"/></Address1>
<Address2><xsl:value-of select="Address/AddressOrg"/></Address2>
<CompanyName><xsl:value-of select="Address/Name"/>/CompanyName>
<Fax />
<OrganizationCode />
<Phone />
</OrganizationAddress>
<OrganizationAddress>
<AddressType>ConsignorDDeliveryAddress</AddressType>
<Address1><xsl:value-of select="Address/AddressOrg"/></Address1>
<Address2><xsl:value-of select="Address/AddressOrg"/></Address2>
<CompanyName><xsl:value-of select="Address/Name"/></CompanyName>
<Fax />
<OrganizationCode />
<Phone />
</OrganizationAddress>
<OrgsAddressCollection>
上述问题是因为标签名称与第一个相同 当我使用上面的代码引用它时,地址数据集似乎也在拉到第二个地址。
我希望上面的xslt输出以下转换后的结果:
<OrgsAddressCollection>
<OrganizationAddress>
<AddressType>ConsigneeDeliveryAddress</AddressType>
<Address1>01 Red Road</Address1>
<Address2>Summer Town</Address2>
<CompanyName>Sams Shop</CompanyName>
<Fax />
<OrganizationCode />
<Phone />
</OrganizationAddress>
<OrganizationAddress>
<AddressType>ConsignorDDeliveryAddress</AddressType>
<Address1>01 Blue ROad</Address1>
<Address2>Snow Town</Address2>
<CompanyName>Toms Shop</CompanyName>
<Fax />
<OrganizationCode />
<Phone />
</OrganizationAddress>
<OrgsAddressCollection>
答案 0 :(得分:2)
执行<xsl:value-of select="Address/AddressOrg" />
只会获得第一个Address
元素,以及第一个AddressOrg
。
也许您的案例中只会有两个地址,但要避免过多的重复编码,并使其更加灵活,您可以在此使用xsl:for-each
(或xsl:apply-templates
)
<xsl:for-each select="Address">
<OrganizationAddress>
并且,在此范围内,您可以通过在方括号中指定相关元素的位置来获得两个AddressOrd
元素(请注意您现在所在的xsl:for-each
和Address
元件)
<Address1><xsl:value-of select="AddressOrg[1]"/></Address1>
<Address2><xsl:value-of select="AddressOrg[2]"/></Address2>
要根据输入自定义某些输出标签,您还可以使用xsl:choose
。
试试这个XSLT片段
<OrgsAddressCollection>
<xsl:for-each select="Address">
<OrganizationAddress>
<AddressType>
<xsl:choose>
<xsl:when test="@addressOrg = 'Import'">ConsigneeDeliveryAddress</xsl:when>
<xsl:when test="@addressOrg = 'Exporter'">ConsignorDDeliveryAddress</xsl:when>
</xsl:choose>
</AddressType>
<Address1><xsl:value-of select="AddressOrg[1]"/></Address1>
<Address2><xsl:value-of select="AddressOrg[2]"/></Address2>
<CompanyName><xsl:value-of select="Name"/></CompanyName>
<Fax />
<OrganizationCode />
<Phone />
</OrganizationAddress>
</xsl:for-each>
</OrgsAddressCollection>