2017-08-07 7 views
0

私はそのxmlの中から大きなxmlを持っています。別の小さなxmlを削除する必要があります。私は置換機能を使用していますが、喜びはありません。大きなxmlからxmlをreplace関数で削除する

ビッグのxml:

<Records> 
<Row> 
    <AA>26-JUL-2017</AA> 
    <BB>21</BB> 
    <CC>30-JUL-2017</CC> 
</Row> 
<Row> 
    <AA>29-JUL-2017</AA> 
    <BB>22</BB> 
    <CC>30-JUL-2017</CC> 
</Row> 
</Records> 

小XML:

<Records> 
<Row> 
    <AA>26-JUL-2017</AA> 
    <BB>21</BB> 
    <CC>30-JUL-2017</CC> 
</Row> 
</Records> 

私は必要な出力:

<Records> 
<Row> 
    <AA>29-JUL-2017</AA> 
    <BB>22</BB> 
    <CC>30-JUL-2017</CC> 
</Row> 
</Records> 

私が使用しようとしていますXSLT機能は次のとおりです。

<xsl:variable name="Out"> 

       <xsl:copy-of select="replace($Old, $New, '')" /> 

     </xsl:variable> 

ここで、変数Oldは大きなxmlを含み、変数Newは小さなxmlを含みます。 しかし、私はXMLタグだけの値を取得しないでください。私はCOPY-OFを使用しています。

+0

改訂のお知らせ – Vicky

+0

replace()には文字列が必要です。ノードに与えると、ノードが原子化されますが、実際には構造上のマークアップはすべて失われます。この仕事には適切なツールではありません。 –

答えて

0

は、恒等変換(例えば、XSLT 3.0で単に<xsl:mode on-no-match="shallow-copy"/>またはXSLT 2.0

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

)プラス(私はあなたが、例えば<xsl:param name="New" select="doc('small.xml')"/>を持っていると仮定)空のテンプレート<xsl:template match="Records/Row[some $row in $New//Row satisfies deep-equal(., $row)]"/>を使用してください。 replace関数はプレーンな文字列を扱うための関数です。

+0

は私のために働く – Vicky

関連する問題