2014-09-22 91 views
0

我是XSLT新手,我遵循以下文章來實現我的要求。我的要求是如果滿足子節點中的條件,則完全刪除父節點。與以下文章相同。在空父節點中刪除子節點結果

deleting the parent node if child node is not present in xml using xslt

在參考上述文章中的例子中,我能夠<car>下刪除的內容。但是,我的源XML有一個轉折。轉折點在於它有一個命名空間。

例如:

源XML

<car xmlns="urn:test:v2xml"> 
..... 
</car> 

輸出XML:

<car/> 

我在執行,結果是我的XML輸出空轎廂節點。我期待汽車節點完成刪除,但無論我嘗試了什麼,空車節點仍保留在輸出xml中。

有沒有辦法徹底刪除那個汽車節點?我懷疑我的命名空間與它有關,因爲沒有命名空間,它的工作原理和標籤被完全刪除。

+1

您已經說明了試圖通過複製實例來學習一門編程語言的危險。這不是一個好的學習策略。找一本能夠很好地解釋語言概念的書,以便在複製它們之前瞭解這些示例。 – 2014-09-22 07:52:17

回答

0

你需要指定命名空間car,採取的是要壓制護理carCar

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:v2="urn:test:v2xml" 
       version="1.0"> 
    <!--Identity template to copy all content by default--> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="v2:car[not(Price)]"/> 
</xsl:stylesheet> 
+0

是的,我有這個在我的實施。發生相同的行爲。這個命名空間的模式是否有可能規定minOccurrence爲1,因此XSLt強制空車節點? – 2014-09-23 02:27:42

+0

@CharlieLee:請提供一個顯示問題的[**最小,完整和可驗證示例(MCVE)**](http://stackoverflow.com/help/mcve)。在你這樣做之前,我不會試圖進一步回答。謝謝。 – kjhughes 2014-09-23 02:50:04

+0

夠公平的。我感謝你的迴應。 – 2014-09-23 04:13:45

0

我是能夠實現通過鏈接進行二次改造過程是我想要的刪除空的節點。這就是所謂的多通。因此,在單個XSLT樣式表中,第一個輸出是使用空節點創建的。然後在相同樣式表的第二個轉換中,搜索刪除空節點。最終的輸出提供了清潔的結果。雙通道轉型的例子是在這裏:

Two phase processing: Do not output empty tags from phase-1 XSLT 2.0 processing