2017-07-25 31 views
0

私はxsltprocユーティリティを使用して、以下のようなコマンドを使って複数のxmlテスト結果をきれいに印刷されたコンソール出力に変換しています。 stylesheet.xsltは次のようになりますxsltproc複数のファイルの前後にテキストを追加

xsltproc stylesheet.xslt testresults/* 

は:

begin 
TestSuite: 1 
TestSuite: 2 
TestSuite: 3 
end 

begin 
TestSuite: 1 
end 
begin 
TestSuite: 2 
end 
begin 
TestSuite: 3 
end 

私がしたいことは以下の通りです:

<!-- One testsuite per xml test report file --> 
<xsl:template match="/testsuite"> 
    <xsl:text>begin</xsl:text> 
    ... 
    <xsl:text>end</xsl:text> 
</xsl:template> 

これは私にこのような出力を提供します

グーグルはtです空になる。私はxsltprocにそれらを与える前に、何とかxmlファイルをマージできるかもしれないと思うが、もっと簡単な解決策を望んでいた。 XSLTは、単一のソースツリー上で動作し、xsltprocは、単一のツリーに複数のドキュメントを構成するのに十分な情報を持っていないので、実際にそれが行うための唯一の賢明なものであるよう

答えて

1

xsltprocは、別途各指定されたXML文書を変換します。テンプレートは "begin"と "end"テキストを持つテキストノードを出力するので、これらのノードは各入力ドキュメントに対して出力されます。

「開始」と「終了」を1つだけ設定する方法はいくつかあります。 すべては、<testsuite>要素のテンプレートからテキストノードを取り上げることから始まります。出力の各 "TestSuite:"行が1つの<testsuite>要素に対応する必要がある場合は、入力文書を物理的にマージしてもそれを実行する必要があります。

解決策の1つは、「開始」と「終了」行の責任をXSLTから完全に取り除くことです。例えば、このような簡単なスクリプトをスタイルシートからxsl:text要素を削除し、書き込み:

echo begin 
xsltproc stylesheet.xslt testresults/* 
echo end 

を別の方法として、個々のXMLファイルはXML宣言で始まっていない場合、あなたはxsltprocを実行することによって、動的にそれらをマージするかもしれません

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:template match="/suites"> 
    <!-- the transform of the root element produces the "begin" and "end" --> 
    <xsl:text>begin&#x0A;</xsl:text> 
    <xsl:apply-templates select="testsuite"/> 
    <xsl:text>&#x0A;end</xsl:text> 
    </xsl:template> 

    <xsl:template match="testsuite"> 
    ... 
    </xsl:template> 
</xsl:stylesheet> 
:対応するスタイルシートは、これらの線に沿って形を取るかもしれない

:このようなコマンドを使用して、

関連する問題