Xml 引用重复标记中的数据
我真的很感激你能帮我解决这个问题 请你能帮我一下吗?我在网上找了一个工作环境或类似的例子,但什么也找不到 我已收到以下要导入系统的xml:Xml 引用重复标记中的数据,xml,xslt,Xml,Xslt,我真的很感激你能帮我解决这个问题 请你能帮我一下吗?我在网上找了一个工作环境或类似的例子,但什么也找不到 我已收到以下要导入系统的xml: <Address addressOrg="Import"> <Name>Sams Shop</Name> <AddressOrg>01 Red Road</AddressOrg> <AddressOrg>Summer Town</AddressOrg> <City>
<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>
<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>
<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>
山姆商店
红道01号
夏日小镇
托姆斯商店
蓝道01号
雪城
我正在尝试完成下面的xslt:
<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>
<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>
<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>
寄售地址
/公司名称>
发货人交货地址
上面的问题是,因为标记名与第一个相同
当我使用上面的代码引用第二个地址时,这组地址数据似乎也在传递到第二个地址
我希望上面的xslt输出下面的转换结果:
<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>
<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>
<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>
寄售地址
红道01号
夏日小镇
山姆商店
发货人交货地址
蓝道01号
雪城
汤姆商店
执行
只会得到第一个地址
元素,以及该元素下的第一个地址组织
在本例中,您可能只有两个地址,但为了避免太多重复编码,并使其更加灵活,您可以在此处使用xsl:for each
(或xsl:apply templates
)
要根据输入自定义某些输出标记,还可以使用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>
寄售地址
发货人交货地址
大家好,非常感谢您提供的解决方案。上面的xslt片段的问题是,这只会给我寄件人交付地址信息,但需要它才能循环并提供CosignorDeliveryAddress。还有其他地址以及不同的标记,这是很难做到的编码。AgentAddress
AABBCCDD
您可以使用
自定义地址类型。我修改了答案,以表明这一点。