Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xslt在父节点内获取子节点_Xslt_Xslt 2.0 - Fatal编程技术网

如何使用xslt在父节点内获取子节点

如何使用xslt在父节点内获取子节点,xslt,xslt-2.0,Xslt,Xslt 2.0,我有一个xml格式的 <ModelAttrib> <ModelAttribData> <ID>5</ID> <AttributeID>1</AttributeID> </ModelAttribData> <Attribute> <AttributeData> <ID>1</ID

我有一个xml格式的

<ModelAttrib>
    <ModelAttribData>
        <ID>5</ID>
        <AttributeID>1</AttributeID>
    </ModelAttribData>
    <Attribute>
        <AttributeData>
            <ID>1</ID>
            <AttribVariation>
                <AttribVariationData>
                    <ID>2</ID>
                    <AttributeID>1</AttributeID>
                    <ModelAttribVar>
                        <ModelAttribVarData>
                            <ID>3</ID>
                            <AttribVariationID>2</AttribVariation>
                        </ModelAttribVarData>
                    </ModelAttribVar>   
                </AttribVariationData>
            </AttribVariation>
            <AttribVariation>
                <AttribVariationData>
                    <ID>9</ID>
                    <AttributeID>1</AttributeID>
                    <ModelAttribVar>
                        <ModelAttribVarData>
                            <ID>10</ID>
                            <AttribVariationID>9</AttribVariation>
                        </ModelAttribVarData>
                    </ModelAttribVar>   
                </AttribVariationData>
            </AttribVariation>              
        </AttributeData>
    </Attribute>
</ModelAttrib>  

5.
1.
1.
2.
1.
3.
2.
9
1.
10
9
我想把它转换成

<FeatureProduct>
    <ID>1</ID>
    <FeatureOptProduct>
        <ID>3</ID>
    </FeatureOptProduct>
    <FeatureOptProduct>
        <ID>9</ID>
    </FeatureOptProduct>
</FeatureProduct>

1.
3.
9
基本上,FeatureProduct节点映射到属性,FeatureOptProduct映射到AttribVariation。我有多个这样的ModelAttrib节点,我想把它映射到第二种xml格式。 到目前为止,我的代码看起来像这样

  <xsl:template match = "/">
    <PolicyProduct>
      <ProductCode>
        <xsl:value-of select = "//ProdModelData/Code"/>
      </ProductCode>
      <PlanName>
        <xsl:value-of select = "//ProdModelData/Description"/>
      </PlanName>
      <LineOfBusiness>Annuity</LineOfBusiness>
      <AnnuityProduct>
        <xsl:for-each select= "//ModelAttrib/Attribute/AttributeData">
              <FeatureProduct>
                <ID>
                  <xsl:value-of select="ID" />
                </ID>
                <Name>
                  <xsl:value-of select="Description"/>
                </Name>
              </FeatureProduct>
            </xsl:for-each>
      </AnnuityProduct>
    </PolicyProduct>
  </xsl:template>

年金
但是我一直在研究如何以

<FeatureProduct>
 <FeatureOptProduct>
   <ID></ID>
 </FeaturOptProduct>
 <FeatureOptProduct>
   <ID></ID>
 </FeatureOptProduct>
</FeatureOptProduct>

您需要在

<xsl:for-each select= "//ModelAttrib/Attribute/AttributeData">

循环。具有的内部循环运行在所有
节点上

<xsl:for-each select="//ModelAttrib/Attribute/AttributeData">
    <FeatureProduct>
        <ID><xsl:value-of select="ID" /></ID>
        <Name><xsl:value-of select="Description" /></Name>
        <xsl:for-each select="AttribVariation"> <!-- inner loop -->
            <FeatureOptProduct>
                <ID><xsl:value-of select="AttribVariationData/ID" /></ID>
            </FeatureOptProduct>
        </xsl:for-each>
    </FeatureProduct>
</xsl:for-each>

此循环将生成以下输出

<AnnuityProduct>
  <FeatureProduct>
     <ID>1</ID>
     <Name/>
     <FeatureOptProduct>
        <ID>2</ID>
     </FeatureOptProduct>
     <FeatureOptProduct>
        <ID>9</ID>
     </FeatureOptProduct>
  </FeatureProduct>
</AnnuityProduct>

1.
2.
9
但是,根据所需的输出,您需要
3
9
作为
。不确定这是否是输入错误,但此组合确实位于
子节点的同一XPath上。您可能需要根据所需的
FeatureOptProduct/ID
值更改XPath