如何使用 XSLT 从 XML 读取所有内部递归值
How to Read all inner recursive values from XML using XSLT
需要从所有级别的递归中提取值XML structure.The所有级别的结构都相同
<regPackagingHierarchyList>
<RegistrationPackagingHierarchy>
<recordId>Level0</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level5</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level4</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level3</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level2</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level1</recordId>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regPackagingHierarchyList>
Expected Result should be in the follwing format
Level1,Level2,Level3,level4,Level5
1.0 中的一种方式可以是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:for-each select="//regParentPackagingHierarchy//recordId">
<xsl:sort select="position()" order="descending" />
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
http://xsltfiddle.liberty-development.net/pPzifpv
编辑:
<xsl:value-of select="concat('Count(regPackagingHierarchyList) = ', count(//regPackagingHierarchyList))"/>
<xsl:value-of select="concat('Count(RegistrationPackagingHierarchy) = ', count(//RegistrationPackagingHierarchy))"/>
编辑 2:
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="recordId">
<xsl:apply-templates/>
<!-- Apply all the templates beneath first and output your id after they got applied. -->
<xsl:if test="ancestor::regParentPackagingHierarchy">
<xsl:value-of select="."/>
</xsl:if>
</xsl:template>
需要从所有级别的递归中提取值XML structure.The所有级别的结构都相同
<regPackagingHierarchyList>
<RegistrationPackagingHierarchy>
<recordId>Level0</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level5</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level4</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level3</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level2</recordId>
<regParentPackagingHierarchy>
<RegistrationPackagingHierarchy>
<recordId>level1</recordId>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regParentPackagingHierarchy>
</RegistrationPackagingHierarchy>
</regPackagingHierarchyList>
Expected Result should be in the follwing format Level1,Level2,Level3,level4,Level5
1.0 中的一种方式可以是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:for-each select="//regParentPackagingHierarchy//recordId">
<xsl:sort select="position()" order="descending" />
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
http://xsltfiddle.liberty-development.net/pPzifpv
编辑:
<xsl:value-of select="concat('Count(regPackagingHierarchyList) = ', count(//regPackagingHierarchyList))"/>
<xsl:value-of select="concat('Count(RegistrationPackagingHierarchy) = ', count(//RegistrationPackagingHierarchy))"/>
编辑 2:
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="recordId">
<xsl:apply-templates/>
<!-- Apply all the templates beneath first and output your id after they got applied. -->
<xsl:if test="ancestor::regParentPackagingHierarchy">
<xsl:value-of select="."/>
</xsl:if>
</xsl:template>