2016-06-30 11 views
1

私はxslt/xsd-programmingの初心者ですから、XMLSpyを使ってxml2xml変換を作成しています。両方のxmlのために私はxsdを持っています。残念ながら、次のコードは有効ではありません。xsltはxsl:for-eachの代わりに要素を受け取ります

<xsl:template match="/"> 
    <table xsi:noNamespaceSchemaLocation="table.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <xsl:for-each select="table/body/line"> 
      <row> 
      </row> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

エラーメッセージには、テーブルの後ろに行要素が必要であることが示されています。
詳細<xsl:for-each>は、要素<table>のタイプ{匿名}ではありませんでした。

xsdへの参照を削除するかfor-eachステートメントを削除することで、この問題を解決できます。
しかし、何が間違っているのかわかりません。私の理解によれば、for-each-loopは最初のxmlの各行に<row>タグを繰り返すだけです。
ここにターゲットのxsdの一部があります。

<xs:element name="table"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="row" maxOccurs="unbounded"/> 
      <xs:element ref="Metadata" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+0

まあ、スキーマはXSLT変換の結果は、XSLTのように見えるではないか、見てすることになっている方法を定義します。 XSLTコードは、通常、XSLT命令と結果要素が混在していますが、明らかに、その方法は結果のスキーマを遵守していません。したがって、XSLTを書くときには、単にメッセージを無視します。 XMLSpyでXSLT変換を実行できないというエラーが実際に発生しますか? –

+0

実際、私はXSL変換を実行しようとはしていませんでしたが、動作します。私は今メッセージを無視すると思う。ありがとう。 –

答えて

1

私はAltovaのは「table.xsdでスキーマに対してこの要素を検証してください」という意味の信号として属性xsi:noNamespaceSchemaLocation="table.xsd"の存在を使用していると思われます。これは必要な要素自体を含めるのではなく、必要な要素を作成するためのXSLT命令が含まれているため、スキーマに対して有効ではないため、必要な要素ではありません。属性:

は、XSLを使用して属性を生成してみてください、この問題を回避するには

<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <xsl:attribute name="xsi:noNamespaceSchemaLocation">table.xsd</xsl:attribute> 
    <xsl:for-each select="table/body/line"> 
      <row/> 
    </xsl:for-each> 
</table> 
+0

コードを使用しているときにメッセージが表示されなくなる可能性があるようです。 (Altovaからの例があり、これは私が使用した同じメソッドを使用していて妥当であるので驚くべきことです)。ありがとうございました。 –

関連する問題