1
ここでは、私の使用例のトーンダウン版です。私は私の変換エンジンとしてPerlでlibxsltはを使用していますexsl:node-setが属性の値を取得していません
<?xml version="1.0" encoding="utf-8"?>
<msg>
<ent key="key1" type="error">
<text>Error: Could not find </text>
<translation>Another Error similar to previous one.</translation>
</ent>
<ent key="key2" type="damage">
<text>Error2: Could not find2 </text>
<translation>Another Error2 similar to previous one.</translation>
</ent>
</msg>
を次のように私は
変換
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">
<xsl:output method="text"/>
<xsl:template match="Message">
<xsl:for-each select="ent">
<xsl:variable name="current_key" select="@key"/>
<xsl:variable name="current_type" select="@type"/>
<xsl:variable name="Match" select="exsl:node-set(msg)/ent"/>
<xsl:copy>
<xsl:copy-of select="exsl:node-set($Match)/@type"/>
<xsl:copy-of select="exsl:node-set($Match)/@key|exsl:node-set($Match)/translation/text()"/>
<!--- <xsl:copy-of select="exsl:node-set($Match)/@key|exsl:node-set($Match)/translation/text()|exsl:node-set($Match)/@type"/> Trial statement -->
</xsl:copy>
</xsl:for-each>
<xsl:call-template name = "Me" select="$Message"/>
</xsl:template>
</xsl:stylesheet>
ためのXSLファイルと入力ファイルを持っています。私の変換スクリプトは既にanswerに記載されています。スクリプトを実行するたびに、次のように出力されます。
Error: Could not find
Another Error similar to previous one.
Error2: Could not find2
Another Error2 similar to previous one.
属性type
が印刷されないのはなぜですか? exsl:node-set
やその他の技術の助けを借りてそれを取得するにはどうすればよいですか?また、試し文に属性type
を出力に含めることができますか?
を、何が 'はありませんあなたの入力でテンプレートが一致する「メッセージ」ノードなぜ 'exsl:node-set()'を使用しようとしているのかは、xslと入力xmlが一致していないと判断できないでしょう。 –
あなたが何を言っているのか分かりません。スクリプトは正常に実行され、テンプレートが呼び出され、出力が表示されます。私は、これを除いて、最小限の、再現可能で実行可能な例を投稿する方法を知らない。 – Recker
出力を生成するデフォルトテンプレートである可能性があります。入力にMessageという名前の要素がないときに、 'Message'が呼び出されるテンプレートにどのように期待しますか? - あなたの最小限の例は最小限であるかもしれませんが、それはもはや正しいものではなく、あなたの実際の問題には役に立たないかもしれません。 –