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