使用XSLT展平复杂的XML

时间:2018-04-12 00:46:05

标签: xml xslt-1.0

XML structure

    <Root>
     <Property>
          <CollectionID>ESTATE_APPRAISAL</CollectionID>
          <CollectionTypeCode>003</CollectionTypeCode>
        <Valuation>
           <PropertyReference>
                    <ID>CONTRIBUTIONFACTOR</ID>
           </PropertyReference>
           <ValueGroup>
           <PropertyValue>
              <NameSpecification>
                  <Name>CF 4 - General Purpose Asset</Name>
              </NameSpecification>
           </PropertyValue>
           </ValueGroup>
        </Valuation>
      <Valuation>...</Valuation>
      <Valuation>...</Valuation>
      <Valuation>...</Valuation>
   </Property>
   <Property>
      <CollectionID>ESTATE_APPRAISAL</CollectionID>
      <CollectionTypeCode>003</CollectionTypeCode>
      <Valuation>...</Valuation>
      <Valuation>...</Valuation>
      <Valuation>...</Valuation> 
   </Property>
   </Root>

大家好,上面是我需要展平的XML结构,以接收一个节点作为属性的XML。我遇到的问题是,我需要循环使用多个评估节点。

当我执行for-each标记时,它只会将值带到第一个评估节点,然后进入下一个属性进行处理。在示例中,我包括只有一个属性结构。在完整的xml文件中有这样的倍数,结构也类似于其他属性。

我需要一个像结构一样出现在表格中的数据 集合ID,TypeCode,属性引用,属性值

全部谢谢。

1 个答案:

答案 0 :(得分:1)

或许这样的事情?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1">
  <xsl:template match="/">
    <Properties>
      <xsl:for-each select="//Valuation">
        <Property>
          <xsl:attribute name="CollectionID">
            <xsl:value-of select="../CollectionID"/>
          </xsl:attribute>
          <xsl:attribute name="TypeCode">
            <xsl:value-of select="../CollectionTypeCode"/>
          </xsl:attribute>
          <xsl:attribute name="PropertyReference">
            <xsl:value-of select="PropertyReference/ID"/>
          </xsl:attribute>
          <xsl:attribute name="PropertyValue">
            <xsl:value-of select="ValueGroup/PropertyValue/NameSpecification/Name"/>
          </xsl:attribute>
        </Property>
      </xsl:for-each>
    </Properties>
  </xsl:template>
</xsl:stylesheet>