2016-04-26 7 views
0

入力:2つのxmlファイル。最初のフィールドには関連する値を含むいくつかのフィールドがありますが、ノード全体が実際には空です。このノードのデータは、2番目のXMLファイルに含まれています。XSLは、ノード全体を別のxmlファイルのデータで置き換えます。

出力:2番目に提供されたxmlファイルから取得された欠損値を含む最初のxmlファイル。

方法:XSLファイルを使用して、2番目のxmlの適切なノードから最初のxmlの欠損値を注入するタスクを実行する必要があります。

メインinput.xmlに

<?xml version="1.0" encoding="UTF-16"?> 
<root> 
<data> a </data> 
<values> 
    <value>1</value> 
    <value>2</value> 
</values> 
<objects></objects> 
</root> 

Source_of_missing_info.xml

<?xml version="1.0" encoding="UTF-16"?> 
<root> 
<data> a </data> 
<values> 
    <value>1</value> 
    <value>2</value> 
</values> 
<objects> 
    <object>Car</object> 
    <object>Train</object> 
    <object>Ship</object> 
</objects> 
</root> 

Merger.xsl - これが必要です。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >  
    <xsl:output method="xml" indent="yes" /> 

<xsl:template match="/"> 
    <xsl:copy-of select="*"/> 
</xsl:template> 

    <xsl:variable name="lookup" select="document('input_missing.xml')" /> 

    <xsl:template match="objects"> 
      <xsl:copy-of select="$lookup" /> 
      <xsl:value-of select="text()" /> 
    </xsl:template> 

</xsl:stylesheet> 

予想される出力:

<?xml version="1.0" encoding="UTF-16"?> 
<root> 
<data> a </data> 
<values> 
    <value>1</value> 
    <value>2</value> 
</values> 
<objects> 
    <object>Car</object> 
    <object>Train</object> 
    <object>Ship</object> 
</objects> 
</root> 

が、それは上記のMerger.xslを変更することによって、所望の変換を達成することは可能ですか?ソリューションの鍵は何ですか?

答えて

1

なぜ単に:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="objects"> 
    <xsl:copy-of select="document('input_missing.xml')/root/objects"/> 
</xsl:template> 

</xsl:stylesheet> 
+0

これは動作します! ''のおかげで、検索した例でこの構文オプションが見つかりませんでした。 – teodron

関連する問題