2016-11-30 55 views
0

僅使用不帶擴展名的xslt 1.0。xslt 1.0:檢查任何源節點是否包含任何目標節點的文本

給出的例子:

<forest> 
<hunter>fast antelope</hunter> 
<hunter>jumping deer</hunter> 
<hunter>large elk</hunter> 
<hunter> </hunter> 
<prey>rabbit</prey> 
<prey>eagle</prey> 
<prey>deer</prey> 
<prey>elk</prey> 
<prey></prey> 
</forest> 

<forest> 
<hunter>fast antelope</hunter> 
<hunter>jumping deer</hunter> 
<hunter>large elk</hunter> 
<hunter> </hunter> 
<prey>rabbit</prey> 
<prey>eagle</prey> 
<prey>fox</prey> 
<prey>goose</prey> 
<prey></prey> 
</forest> 

我怎麼能寫<xsl:if><xsl:when>測試,以檢查是否有至少一個<hunter>包含至少一個<prey>文,沒有匹配<hunter><prey>中的空白或純空白文本節點?

可能有更多的節點,所以這一定是一個純文本模式,沒有立場的技巧等

我預期的結果將是一個例子在比賽中(基於鹿,在<prey>麋鹿)和示例二中的失敗(僅限空白和空的text()節點)。

謝謝!

+0

沒有你的處理器的支持'節點集()'擴展功能? –

+0

在android上,所以沒有。 – sgc

回答

1

如何:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/forest"> 
    <xsl:variable name="marker"> 
     <xsl:for-each select="hunter"> 
      <xsl:if test="../prey[normalize-space()][contains(current(), .)]">1</xsl:if> 
     </xsl:for-each> 
    </xsl:variable> 
    <result> 
     <xsl:choose> 
      <xsl:when test="string($marker)"> 
       <xsl:text>Match</xsl:text> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:text>No Match</xsl:text> 
      </xsl:otherwise> 
     </xsl:choose> 
    </result> 
</xsl:template> 

</xsl:stylesheet> 
+0

我沒有測試過這個,但標記爲正確的,因爲1)這就是我以爲我在發帖後不得不做的事情,2)它對我來說非常有意義,3)你是你是誰;)。 – sgc

+0

我建議你測試一下,因爲我沒有(反正也不徹底)。而你的第三點並不持水。這裏沒有人是可靠的。 –

+0

雖然我添加了類似''來篩選出不相關的''節點,它確實有效。至於三,這一切都取決於你的'範圍'。如果知道我們感謝您的時間和專業知識,它給了您溫暖和模糊的感覺,那麼'方法返回true「。 – sgc

相關問題