複数のxmlファイルが処理され、1つのxmlファイルに書き込まれます。私は変換の大部分を行い、1つのxmlファイルに特定の要素を見つけるという場所を打ちました。xsltを使用してxmlファイル内の特定の要素を見つける
(parts.xml)であるソースXMLのひとつ:
<parts>
<part>
<name>head shaft</name>
<code>100</code>
</part>
...
</parts>
別のソースXML(price.xml):
<price-list>
<price>
<part-name>head shaft</part-name>
<cost>28.45</cost>
...
</price>
...
</price-list>
そして、私はに属しているだけのコード要素を取得する必要があります特定の名前要素 これは1つのソースXMLファイルです。このように、私は多くの処理が必要です。
マイ出力XMLは、この(result.xml)のようにする必要があり:部品コードを取得するために
<part-order>
<part code=100 name="head shaft" price=32.05 qty=1 />
...
</part-order>
マイXSLT関数は次のとおりです。
<xsl:function name="p:find">
<xsl:variable name="partdoc" select="document('parts.xml')"/>
<xsl:param name="str"/>
<xsl:apply-templates select="$partdoc/p:/parts/part[contains(p:name, '$str')]"/>
<xsl:apply-templates select="$partdoc/p:code" />
</xsl:function>
そして最後に、私は、関数を呼び出したいです
<xsl:template match="/">
<xsl:copy>
<xsl:variable name="code">
<xsl:value-of select="p:find('head shaft')"/>
</xsl:variable>
<part code="{'$code'}" name="{'head shaft'}" price="{$somelogic}"/>
</xsl:copy>
</xsl:template>
私は関数宣言で間違いをしています。あなたは助けてください。
キーでドキュメント参照を呼び出すことは可能ですか?私はそれを呼び出そうとしましたが、結果を表示しませんでした。キー( 'part-ref'、 'head shaft'、$ partdoc)/ code –
@SrikrishnaPothukuchi、私は私のためにうまくいく完全な例で答えを編集しました。それでも問題が解決しない場合は、最小限の完全なXMLサンプル、現在のXSLT、入手した出力、使用されているXSLTプロセッサに関する情報を示す質問を編集してください。 –
百万のマーティンに感謝します。あなたが正しく指摘したように、それは私のEclipseで問題です。私はEclipse NeonでSaxon 9.7を使用しています。ときには正しく動作しないことがあります。 XML Spearを使用した場合、同じコードが100%の精度で動作しています。 –