2017-08-07 20 views
0

我有一個很大的xml,出於該xml我需要刪除另一個小xml。我正在使用替換功能,但沒有快樂。通過替換函數從大xml中刪除xml

大的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> 

這裏變量舊包含大xml和變量新包含小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:template match="Records/Row[some $row in $New//Row satisfies deep-equal(., $row)]"/>(在這裏我假設你已經如<xsl:param name="New" select="doc('small.xml')"/>)。函數replace用於處理純字符串。

+0

爲我工作感謝 – Vicky