2017-08-10 27 views
0

我有一個XML如何刪除從XML元素用XPath作爲輸入在XSLT 1.0

<?xml version="1.0" encoding="utf-8"?> 
<ns1:Student xmlns:ns1="http://test1.org/test1" xmlns:ns2="http://test2.org/test2" xmlns:ns3="http://test3.org/test3" xmlns:ns4="http://test4.org/test4"> 
    <ns2:Details> 
     <ns3:Number>12</ns3:Number> 
     <ns3:Name>Rosh</ns3:Name> 
    </ns2:Details> 
    <ns2:Address> 
     <ns3:Number>45</ns3:Number> 
     <ns3:City>Blore</ns3:City> 
    </ns2:Address> 
</ns1:Student> 

我正在使用XSLT 1.0處理器。
如何刪除節點詳細信息ns1:Student/n2:Details/ns3:Number)?

這是爲我工作,截至目前..

<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*" /> 
<xsl:param name="ElemToDelete" select="'/ns1:Student/ns2:Details/ns3:Number'"/> 

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

<xsl:template match="/ns1:Student/ns2:Details/ns3:Number"/> 

但我需要改變它在我可以通過它包含XPath值到第2模板變量這種方式。這可能嗎?

+1

你的問題不清楚。 「xpath作爲輸入」在哪裏? –

+0

要求是這樣的。我需要將xpath作爲輸入參數傳遞給xslt。對應於該xpath的節點需要從xml中移除,並且生成的xml將是我的xslt的輸出。 – Rosh85

回答

0

簡短的回答

這不是在XSLT 1.0可能 - 除非你的處理器支持某種evaluate()擴展功能。

再回應

XPath是更加靈活比你的示例所示。可以用多種方式表示相同的路徑,例如:

/ns1:Student/n2:Details/ns3:Number 
ns1:Student[1]/n2:Details[1]/ns3:Number[1] 
pf1:Student/pf2:Details/pf3:Number 
//ns3:Number[parent::n2:Details] 

這些在給定XML的上下文中在語義上都是等價的。

理論上,您可以爲給定XML中的每個節點構建自己的路徑表達式,並將其與給定路徑進行比較。實際上,它需要一套嚴格的規則(比XPath語言提供的要嚴格得多),您和路徑提供者都會遵守這些規則,這樣您就可以得到完全相同的字符串。


編輯

我忘了提及使用給定路徑創建一個新的XSLT樣式表,然後將結果以原始XML輸入的可能性。

+0

我剛剛更新了問題,直到現在我所做的任何事情(道歉,因爲我不是很熟悉這個網站)。任何可以在那裏做的事情? – Rosh85

+0

如果參數是一個字符串,那麼我相信這些是你唯一的選擇。您正在使用哪種處理器,以及如何啓動轉換? –

+0

正在從BPEL流程啓動轉換(Oracle SOA Suite) – Rosh85