2016-12-29 61 views
0

有沒有方法可以使用XSLT將2個或3個XML節點複製到變量中?我正在尋找節點而不是節點值。XSLT:僅將xml的少數節點複製到變量中

我的示例XML是:

<node1> 
    <node2> 
    <node3>abc</node3> 
    <node4>def</node4> 
    </node2> 
</node1> 
<node1> 
    <node2> 
    <node3>123</node3> 
    <node4>456</node4> 
    </node2> 
</node1> 

我的XSLT樣本:

<xsl:for-each select="/node1/node2"> 
    <xsl:if test="current()/node4 ! = '456'"> 
    <xsl:copy-of select="./node3" /> 
    <xsl:copy-of select="./node4" /> 
    </xsl:if> 
</xsl:foreach> 

這樣做的問題是,我得到node4每次爲XML的第一個節點,而不是目前的一個。在node3我得到當前的一個,沒有問題。

+0

我的輸出應該是node3和node4的值作爲平面文件,並且應該消除重複項。而且它應該表現得非常快,因爲輸入像20MB一樣巨大。 – rgu

回答

0

您的問題可能由RTF XSLT-1.0的(導致樹片段)的問題造成的:

的變量不能包含一個節點集(但只有RTF)

我解釋這個問題在this SO answer

RTF不能被XPath-1.0表達式查詢,所以它們只在非常有限的情況下才有用。

一個解決方案將使用the newer XSLT-2.0

+0

謝謝@ zx485。有沒有解決這個問題的辦法,而不是使用xslt 2.0? – rgu

+0

@rgu:不幸的是,我不知道的是:-(否則,我會在我的答案中包含這一點。 – zx485

+0

您可以使用節點集函數將rtf轉換爲節點集。請參閱鏈接:http://www.microsoft.com/downloads/details.asp? www.xml.com/pub/a/2003/07/16/nodeset.html – Bluewood66

0

它可以幫助您一次選擇您想要的所有節點。

<xsl:variable name="sample"> 
    <xsl:copy-of select="/node1/node2[node4!='456']/*[name()='node3' or name()='node4']"/> 
</xsl:variable>