요소의 중첩을 기반으로하는 시퀀스 번호가 필요합니다. 아래 예제에서 어떤 참조 요소의 자식이 아닌 모든 참조 요소는 시퀀스 번호를 가지며, 중첩 된 참조 요소는 부모 시퀀스 번호 + 현재 참조 요소의 십진수 + 위치를 가져야합니다.요소의 중첩을 기반으로하는 시퀀스 번호가 필요합니다.
Input.xml
<root>
<front>
<reference1 type="ref" href="a.xml">
<reference1 type="ref" href="x.xml"/>
<reference1 type="ref" href="z.xml"/>
</reference>
</front>
<reference2 type="ref" href="b.xml"/>
<reference2 type="ref" href="c.xml">
<reference2 type="ref" href="d.xml">
<reference2 type="ref" href="y.xml"/>
</reference>
</reference>
<back>
<reference3 type="ref" href="e.xml"/>
</back>
</root>
Output.xml
나는이 시도하지만 논리 얻을 수 있지 않다<root>
<reference href="a.xml" sequence="1"/>
<reference href="x.xml" sequence="1.1"/>
<reference href="z.xml" sequence="1.2"/>
<reference href="b.xml" sequence="2"/>
<reference href="c.xml" sequence="3"/>
<reference href="d.xml" sequence="3.1"/>
<reference href="y.xml" sequence="3.1.1"/>
<reference href="e.xml" sequence="4"/>
</root>
:
<xsl:template match="/">
<root>
<xsl:for-each select="//reference">
<reference>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:if test="not(child::reference)">
<xsl:attribute name="sequence">
<xsl:value-of select="position()"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="child::reference">
<!-- something to be done here -->
</xsl:if>
</reference>
</xsl:for-each>
</root>
감사를
솔루션을 이용해 주셔서 감사합니다. 귀하의 로직은 이전 소스에 대해 완벽하게 작동합니다. 이제 소스를 편집했습니다.이 새로운 시나리오에서는 노드 이름이 항상 같지는 않지만 유형 att는 동일합니다. 논리를 적용하면 xsl : number가 새로운 참조 요소마다 처음부터 시작되지만 동일한 출력이 필요합니다. 당신이 도울 수 있기를 바랍니다. 감사. – Namrata
@Namrata - 업데이트 된 스타일 시트를 보려면 제 편집을 참조하십시오. –
Daniel에게 감사드립니다. – Namrata