我是XPath和XSLT的新手。我正在編寫一個XSLT,它在輸入中找到任何'complexType'作爲類型屬性時遞歸地應用模板。在XSLT中遞歸應用模板時的問題
請注意,識別復雜類型的邏輯工作正常,所以我不打擾。
下面是我的XML模式輸入:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Object1">
<xs:all>
<xs:element minOccurs="0" name="segment-1" type="xs:string" />
<xs:element minOccurs="0" name="segment-2" type="xs:string" />
<xs:element minOccurs="0" name="complexType1" type="anyComplexType" />
</xs:all>
</xs:complexType>
<xs:complexType name="anyComplexType">
<xs:all>
<xs:element minOccurs="0" name="complexType2" type="anotherComplexType" />
</xs:all>
</xs:complexType>
<xs:complexType name="anyComplexType">
<xs:all>
<some Element>
</xs:all>
</xs:complexType>
</xs:schema>
,這是XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.approuter.com/schemas/cdk/api/">
<xsl:output indent="yes" xml:space="preserve" method="xml" />
<xsl:variable name="ObjectType" select=" 'Object1' " />
<xsl:template match="/">
<xsl:element name="object">
<xsl:attribute name="name" select="$ObjectType" />
<xsl:attribute name="label" select="$ObjectType" />
<xsl:attribute name="minCount">1</xsl:attribute>
<xsl:attribute name="maxCount">1</xsl:attribute>
<xsl:apply-templates select="//*:complexType[@name = $ObjectType]" />
</xsl:element>
</xsl:template>
<xsl:template match="*:complexType">
<!-- Logic to fing complexType' goes here -->
<xsl:call-template name="Elements" />
</xsl:template>
<xsl:template name="Elements">
<xsl:apply-templates select="//*:complexType[@name [email protected]]" />
</xsl:template>
</xsl:stylesheet>
解釋如下流程:
- XSLT開始從根讀取輸入。
- 創建對象元素,然後應用複雜類型名稱爲Object1的另一個模板(ComplexTypeTemplate)。
- ComplexType模板正在執行一些邏輯以將complexType標識爲類型屬性,然後調用另一個名爲'Element'的模板。
- 元素模板再次調用complexType模板,以便爲complexType類型應用相同的邏輯。
第4步不適用於我。我相信這裏有一些XPath模式或路徑問題。發生
在這種情況下是否可以顯示您期望的輸出?謝謝! –
嗨Pooja。如果您再次登錄,請考慮接受下面的答案。爲此,請單擊答案左側的刻度線,將問題標記爲已解決。謝謝。 – halfer