2013-12-19 76 views
0

我製作了搜索功能,可以從XML文件中搜索產品。搜索功能xml包含撇號的變量xpath

問題是,我的XML內容包含一個撇號'。 當我使用關鍵字accu搜索時,我得不到結果,因爲撇號。

這是我用來收集我的結果中的XPath:

$產品= $ XML的>的XPath( 「//產品[包括(\」 $關鍵字\ 「)」);

$每次關鍵字不同,取決於您在哪裏搜索。

我的XML看起來是這樣的:

<products> 
     <hoofdgroep>Gereedschappen</hoofdgroep> 
     <subgroep>Accugereedschap</subgroep> 
     <artikelgroep>Accu's voor accugereedschap</artikelgroep> 
     <artikelnummer>224975</artikelnummer> 
     <artikelnaam>accu bosch 9.6V 2.0ah</artikelnaam> 
     <merk>Bosch</merk> 
     <eenheid>st</eenheid> 
</products> 

請幫幫忙!

+0

你在這裏使用什麼編程語言/庫?解決此問題的最佳方法是使用包含XPath變量的固定XPath表達式,然後使用庫提供的任何機制爲該變量提供值。簡單地將未知字符串連接在一起就是邀請相當於SQL注入攻擊的XPath ... –

+0

這是一個網上商店的PHP搜索腳本。客戶需要搜索存儲在XML庫中的產品。 – DlennartD

回答

0

表達完全正確。在發送查詢之前,您必須添加一些轉義或其他內容,例如accu\'s,或者不在搜索關鍵字或文檔中使用其他字符。行情,口音和撇號通常混雜在一起。

不要忘記引用雙反斜槓來防止注入攻擊!順便說一下,XPath允許使用單引號和雙引號來處理字符串,因此您也可以使用單引號而不是雙引號。

+0

嗯,我沒有得到它的工作,所以我找到了另一種解決方案。 我只是刪除關鍵字的s。現在它找到沒有問題的產品。 $ keyword = str_replace(「's」,「」,$ keyword); 嗯,我發現了另一個問題,當關鍵字有混合的情況下,例如AcCu,我沒有得到任何結果,因爲它似乎區分大小寫...... – DlennartD

+0

您可以使用'translate'來稍微轉換XPath中的大小寫1.0(但很難提供unicode支持)。關於這個問題有很多問題。 PHP也允許註冊和使用可能更合適的PHP函數。我想這個問題也有適當的問題,否則你可能會問這是一個新問題。 –