2011-12-19 59 views
0

我有這段代碼,我一直在使用基於搜索名稱過濾字段。問題是我需要它在用戶可以輸入的內容方面有點寬容。所以我必須使用contains函數。我得到它的其他代碼段的工作,但我不知道我怎麼可以用下面的使用它:如何在document.evaluate()中使用XPath contains()函數?

var value = stylesheet.evaluate(
           "//xsl:for-each[@select='book[author="contains(.,'containsSearchTerm')"']", 
           stylesheet, nsResolver, 
           XPathResult.ANY_UNORDERED_NODE_TYPE, null); 

很抱歉,如果報價/轉義是有點混亂。我沒有打開IDE來檢查我的錯誤,我正準備工作。

因爲可能能夠看到containsSearchTerm是我想要獲取表單的值並使用contains函數處理它。這是如何實現的?

請注意,對於XML,XSLT和XPath來說,我很新,所以如果可能的話,需要稍微簡化一下。


回覆邁克爾·凱 -

嗨,我想一個XSLT表內應用搜索項/詞作者場。 是的你是對的,這就是我想要做的。編輯樣式表並應用輸入表單中設置的條件。 到目前爲止,我一直在使用預建功能。根據需要進行修改。 如果對要搜索的輸入的值進行硬編碼,我可以使其包含在外部工作。不過,我希望能夠像「即時」那樣做,而且我真的不確定如何在上下文中實現這一點。 我真正擁有的是在表單中構建的查詢 - 指定要搜索的字段,操作數和搜索詞。但我不想搜索整個字符串,因爲這有點不靈活 - 所以我想使用contains函數來實現搜索的靈活性。

謝謝你的幫助

+0

@mzjn,看來,OP正試圖通過一個XSL樣式表 – newtover 2011-12-19 09:26:17

+0

看所以,什麼是問題? – 2011-12-19 13:07:14

+0

如何在要編寫包含函數的地方編寫一個包含函數以對我輸入的術語進行部分搜索...? – lionysis 2011-12-19 14:00:04

回答

1

因爲你是新來的XML和XSLT,這將是很好,以確認你是不是在這裏下去兔子洞。您正在使用XPath搜索XSLT樣式表。這是一個相當先進/有野心的事情,並且很高興知道它在應用程序的上下文中是有意義的。那麼你想要解決什麼問題?

至於細節,我不得不通過反向工程語法來猜測你的意圖 - 錯誤的代碼總是很困難。我想你可能尋找一個xsl:for-each指令,其選擇屬性具有一般形式

書[作者= ....]

,並要放置在什麼一些限制」。 ......「是,但除此之外,我無法真正瞭解你在做什麼。另外,如果你想成爲'原諒',那麼你可能想要允許空格出現在可能出現空格的地方等等。這可能是正則表達式匹配符合你的需求(正則表達式在XPath 2.0中可用),但是我真的不知道。

+0

請參閱上面的^ – lionysis 2011-12-19 11:46:16

0

如果針對其要評估的XPath表達式XSLT樣式表,包含此片段

<xsl:for-each select= 
    "book[contains(author, ZZZZZ)]"> 

    <!-- Code here. --> 
    </xsl:for-each> 

然後一個XPath表達式選擇該xsl:for-each元件(如果可以選擇其他這樣的元件它們存在)是:

//xsl:for-each 
     [ 
     @select = 'book[contains(author, ZZZZZ)]' 
     ] 

XSLT - 基於驗證

當以下變換:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "//xsl:for-each 
     [@select = 'book[contains(author, ZZZZZ)]' 
     ] 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

施加此XML文檔上:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:for-each select= 
    "book[contains(author, ZZZZZ)]"> 

    <!-- Code here. --> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

它選擇想要的元件並且將其輸出作爲結果

<xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="book[contains(author, ZZZZZ)]"> 

    <!-- Code here. --> 
    </xsl:for-each> 
0

通常可以使用樣式表參數來實現您想要的功能:查找xsl:param。如果您想提供的不僅僅是一個搜索值作爲參數(例如,如果搜索項的數量是可變的),那麼有時候最好的解決方案是xx:evaluate()調用 - 許多XSLT處理器都有一個擴展,允許作爲字符串提供的XPath表達式將被動態地構建和評估。最後,在執行前修改樣式表是一種選擇:不是最簡單的,但有時候是正確的答案。最簡單和最靈活的方式找到您要修改的元素是給它一個xml:id屬性:

<xsl:for-each select="...." xml:id="point-of-change"> 
    ... 
</xsl:for-each> 
相關問題