Xml 引用重复标记中的数据

Xml 引用重复标记中的数据,xml,xslt,Xml,Xslt,我真的很感激你能帮我解决这个问题 请你能帮我一下吗?我在网上找了一个工作环境或类似的例子,但什么也找不到 我已收到以下要导入系统的xml: <Address addressOrg="Import"> <Name>Sams Shop</Name> <AddressOrg>01 Red Road</AddressOrg> <AddressOrg>Summer Town</AddressOrg> <City>

我真的很感激你能帮我解决这个问题

请你能帮我一下吗?我在网上找了一个工作环境或类似的例子,但什么也找不到

我已收到以下要导入系统的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>
<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。还有其他地址以及不同的标记,这是很难做到的编码。AgentAddressAABBCCDD您可以使用自定义地址类型。我修改了答案,以表明这一点。