2016-08-30 6 views
1

私はXSLTの初心者ですので、これが実現可能かどうかはわかりません。私は本当にあなたの助けに感謝します。Refrence XSLTファイルのXSDと要素名と一致する要素名

XSLTをあるフォーマットから別のフォーマットに変換する。 ソースXMLに型がありません。

特定の要素の型を取得するには、XSDを参照する必要があります。

<match="*[not(*)]"> 
    <elementName> 
     <key> 
     <xsl:value-of select="name()"/> 
     </key> 
     <type> 
     if (name() matches name =id in xsd file" 
     // if name = id matches name = id in xsd get type=String 

     <type> 

これはサンプルXSDです:

XSLT 2.0スキーマ認識の変換を使用して
<xs:complexType name = "test"> 
    <xs:sequence 
    <xs:element name="id" type="xs:string"/> 
    </xs:sequence> 
    </xscomplexType> 
+0

あなたの質問は、回答を有効にするにはあまりにもうんざりです。あなたのXML、XSLT、およびXSDの**完全な**例を投稿してください - 参照:[mcve]。 - XSLTプロセッサがXSLT 2.0をサポートしているかどうかを明記してください。 –

答えて

1

、あなたが書くことができます。

<xsl:import-schema> 
    ... schema goes here, either inline or by reference ... 
</xsl:import-schema> 

<xsl:template match="element(id, xs:string)"> 
    ... 
</xsl:template> 

これを使用する通常の方法は、あなたがあなたを書くことを前提としていスキーマ内に何があるかを知るスタイルシート。 Saxonは拡張機能を使ってこれを拡張し、スキーマに含まれるものを発見することができます。たとえば、次のように

<xsl:variable name="type" select="saxon:type-annotation()"/> 
<key><xsl:value-of select="name()"/></key> 
<type>Q{<xsl:value-of select="namespace-from-QName($p)||"}"||local-name-from-QName($type)"/></type> 

サクソン参照:直接理論的には可能ですが、それはそれを得るために仕事の膨大な量だXSLTからスキーマ文書の解析http://www.saxonica.com/documentation/index.html#!functions/saxon

のスキーマ拡張機能:タイプアノテーションとサクソンをxs:include/import/redefine、名前付きの型と匿名型、グローバルとローカルの要素の宣言、置換グループなどを処理する場合は右のようになります。

さらに別のアプローチは、 Saxonから出力できるXMLフォーマット(SCM)の「プリコンパイルされたスキーマ」これらの困難。

他の製品もスキーマにアクセスするためのAPIを提供していますが、実際の標準はありません。

関連する問題