2010-04-01 87 views
0

我需要找出如何檢測節點是否包含顯着信息。如何檢測節點是否包含重要信息?

下面的例子顯示的是認爲 「顯著」 信息由我:

<node> 
    <node1>&nbsp;</node1> 
    </br></br> 
    &nbsp; 

    <node1> 
     &nbsp; 
     <node2></br>&nbsp;</node2> 
     </br></br> 
    </node1> 
    <!-- 
    and so on... 
    --> 
</node> 

<node>是 「」 對我來說。

+0

@Franci佩諾夫,感謝你的更正。 – Kalinin 2010-04-01 08:42:22

+0

但他沒有糾正你畸形的XML文件! – 2010-04-01 12:59:00

+0

好問題(+1)。查看我的解決方案以獲得答案。此外,永遠不會發布畸形的XML文檔。這是邪惡的。 – 2010-04-01 13:00:16

回答

1

這裏是如何做到這一點

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

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

<xsl:template match= 
    "text() 
     [translate(normalize-space(), '&#160;','') 
     = '' 
     ]"/> 
</xsl:stylesheet> 

當這種轉化應用到下面的XML文檔(您提供的一個被嚴重畸形 - 非阱,形成在許多方面!!) :

<!DOCTYPE node [ <!ENTITY nbsp "&#160;"> ]> 
<node> 
    <node1>&nbsp;</node1> 
    <br></br> 
    &nbsp; 

    <node1> 
     &nbsp; 
     <node2><br/>&nbsp;</node2> 
     <br></br> 
    </node1> 
    <!-- 
    and so on... 
    --> 
</node> 

則通緝的結果產生

<node> 
    <node1/> 
    <br/> 
    <node1> 
     <node2> 
     <br/> 
     </node2> 
     <br/> 
    </node1><!-- 
    and so on... 
    --> 
</node> 

這種技術可以推廣

你可以擁有所有whetespace字符在一個xsl:變量,那麼只需重寫身份規則與此模板

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:variable name="vwhiteSpace" select="' &#x9;&#xA;&#xD;&nbsp;'"/> 

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

<xsl:template match="text()"> 
    <xsl:if test="translate(., $vwhiteSpace,'') != ''"> 
    <xsl:copy-of select="."/> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

而你可以指定所有你認爲是「空白」的字符$vwhiteSpace

更新:OP在評論中指示他實際上想要查看「節點」是否重要 - 而不是「清理節點」。

解決這個已經包含在我的解決方案,以最初的問題:

<xsl:variable name="vIsSignificant" select= 
    "translate(., $vwhiteSpace,'') != ''"/> 
+0

@Dimitre Novatchev,我已經很好地解釋了一個問題。有必要回答「是」或沒有「關於問題」這個節點包含重要信息「您的決定」清除「結」我想檢查節點的重要性,而不是清潔對我來說是必要的。 – Kalinin 2010-04-01 14:00:06

+0

@Dimitre Novatchev,謝謝大,代碼有效 – Kalinin 2010-04-02 07:10:42

+0

@kalininew,我的代碼*永遠*有效,我永遠不會發布不完整或未經測試的代碼 – 2010-04-02 12:46:28

相關問題