いくつかのXMLスキーマドキュメントをテキストファイルのセットに変換するために、XSLT 2.0(SaxonHE)を使用しています。 レッツは、私はそれぞれのxsのための別の出力ファイルを欲しいと言う:complexTypeの入力XSDで見つかった、私のテンプレートには、次の入力XMLが何も一致しない場合、XSLTプロセッサは空のファイルを生成するのはなぜですか?
の少なくとも1種の元素を含む任意のXSDについては<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
\t xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
\t <xsl:output method="text" />
\t
\t <xsl:template match="@*|node()">
\t \t <xsl:apply-templates select="node()|@*" />
\t </xsl:template>
\t <xsl:template match="xs:complexType[@name]">
\t \t <xsl:variable name="fileName" select="concat('target/',@name,'.txt')" />
\t \t <xsl:result-document href="{$fileName}"><xsl:value-of select="$fileName"/></xsl:result-document>
\t </xsl:template>
</xsl:stylesheet>
ようloolますxs:complexType、私が得た出力は 'target/{$ fileName} .txt'で正しく生成され、他のファイルはプロセスで生成されません。
私はxs:complexTypeが含まれていないXSDでこの変換を実行すると、名前が$ {input_file} .xmlに続くデフォルトの空のxmlファイルが生成されます。$ {input_file}は入力ファイルの名前。 (たとえば、books.xsdはbooks.xsd.xmlに変換されます)。 私の変換で選択されたテンプレートと何も一致しないときに、そのデフォルトXMLファイルを取り除くには?
私が使用するプロセッサはSaxonHE9ですが、他のプロセッサと同じ結果が得られます。
oXygenのようなエディタを使って、コマンドライン(どのようにコマンドラインが正確に見えるか)、Javaまたは.NET(Javaまたは.NETコードはどのように見えますか)からSaxonをどのくらい正確に実行しますか? –
一般に、https://www.w3。org/TR/xslt20 /#execution-a-transformation mandates "変換の過程でxsl:result-document命令が評価されていなければ、結果シーケンスが空のときに暗黙の結果ツリーも作成されます。暗黙の結果ツリーは子ノードのないドキュメントノードで構成されます。これは、あなたが今までに提供した詳細は、あなたがあなたが得ると言う特定のファイル名を得る理由を説明していませんが、あなたが1つを望まないときの最終結果の理由になる可能性があります。 –
saxonプロセッサ(Java実装)は、次のようにコマンドラインで呼び出されます。 java -classpath saxon9he.jar net.sf.saxon.Transform -t -xsl:transform.xsl -s:./ schemas -o: ./target ./schemasと./targetの両方がディレクトリです。プロセッサをいくつかの入力ファイルで同時に実行したいからです。 –