3

以下を定義するXSDがあります。

<xsd:element name="Product" type="cm:Product" abstract="true" />
<xsd:complexType name="Product" abstract="true">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string" minOccurs="0" />
        <!-- Other common elements -->
    </xsd:sequence>
</xsd:complexType>

<xsd:element name="Subscription" type="cm:Subscription" />
<xsd:complexType name="Subscription">
    <xsd:complexContent>
        <xsd:extension base="cm:Product">
            <xsd:sequence>
                <!-- Subscription specific elements -->
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

製品名と他のいくつかのものを取り、それをWebサービス要求に変換するXSLTを作成する必要があります。cm:Product問題は、一番上の要素が実際に言っているのか、cm:Subscriptionそれとも完全に異なるものなのか(ただし、cm:Productを拡張している)が本当にわからないことです。

cm:Product要素と拡張するすべての要素の両方に一致するテンプレートをどうにかして書くことができる方法はありcm:Productますか?


簡単な入力例

<Subscription xmlns="http://schema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <name>Basis</name>
</Subscription>

私が今まで持っているもの

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:cm="http://schema" 
    exclude-result-prefixes="cm">

    <xsl:param name="processID" />

    <xsl:template match="/">
        <xsl:element name="RequestElement">
            <xsl:element name="processId">
                <xsl:value-of select="$processID" />
            </xsl:element>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="cm:Product/cm:name">
        <xsl:element name="name">
            <xsl:value-of select="." />
        </xsl:element>
    </xsl:template>

    <xsl:template match="text()" />

</xsl:stylesheet>

これは、特定の入力xmlにあるに変更cm:Productするcm:Subscriptionと機能しますが、問題は、それが実際にcm:Subscriptionであることを認識できないことです。私が「知っている」のは、それが拡張する要素であるということだけですcm:Product

4

1 に答える 1

1
<xsl:template match="element(*, cm:Product)/cm:name">

それを行う必要がありますが、適切なトップレベルを追加する必要があります

<xsl:import-schema namespace="https://schema" schema-location="....." />

もちろん、プロセッサがスキーマに対応している必要があります。

于 2012-10-01T18:13:22.363 に答える