2013-03-16 46 views
0

這是我的xml文件等於不工作: -小於,大於,預期中的XPath

<products> 
     <product_id value="1"> 
     <tab_id value="351"> 
      <tab_name value="test1"/> 
      <dist_map value="5"/> 
     </tab_id> 
     </product_id> 
     <product_id value="2"> 
     <tab_id value="352"> 
      <tab_name value="test2"/> 
      <dist_map value="3"/> 
     </tab_id> 
     </product_id> 
    </products> 

這是我的XPath: -

var xPath = '//*[local-name() = "'+elName+'" and '+value+' and '+ value +' '+ls 
     +' contains(concat(@value,","),"'+value+',")and '+ 
     ' translate(@value," -:","")]'+'/../../@value'; 

我有三個按鈕和兩個文本框,代碼是:

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script> 
     var xml; 
     $.get(
     "xml_converted.xml", 
     null, 
     function (data) { 
      xml = data; 
     }, 
     "xml" 
    ); 

     function get_node(ls) 
     { 
     var elName = $('#select').val(); 
     var value = $('#value').val(); 
     var xPath = '//*[local-name() = "'+elName+'" and '+value+' and '+ value +' '+ls 
     +' contains(concat(@value,","),"'+value+',")and '+ 
     ' translate(@value," -:","")]'+'/../../@value'; 
     var iterator = xml.evaluate(xPath, xml.documentElement, null, 
       XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); 
      var thisNode = iterator.iterateNext(); 
      var str = ''; 
      while (thisNode) { 
       if (str) { 
        str += ', '; 
       } 

       str += thisNode.textContent; 
       thisNode = iterator.iterateNext(); 
      } 
      $("#result").text(str); 
     } 
    </script> 
</head> 
<body> 
    <input type="text" id="select"> 
    <input type="text" id="value"> 
    <input type="button" name="button" value="Less than" onclick="get_node('<')"></input> 
    <input type="button" name="button" value="Grater than" onclick="get_node('>')"></input> 
    <input type="button" name="button" value="Equal" onclick="get_node('=')"></input> 
    <div id="result"> 
    </div> 
</body> 
</html> 

與此代碼O/p是: -
我在第二個文本框3(其dist_map屬性值)在第一個文本框dist_map
輸入
然後在低於按鈕其沒有給出任何輸出
如果點擊磨碎器-比按鈕,然後其顯示兩個1,2(其product_id屬性值)
這是不是完美的o/p。
這裏O/P僅1(其PRODUCT_ID屬性值)bcoz 3少於5
如果點擊等於按鈕,然後工作完美2(其PRODUCT_ID屬性值)b'coz兩個文本框的值是在比賽xml文件
這裏只與我的XPath或參數傳遞按鈕類似的問題(<>
請我這個問題,並幫助解決我這個...
感謝

+1

嗨,我注意到你已經有jQuery包括在內,你會對一個解決方案感興趣嗎?這個解決方案爲了用查詢選擇器而不是xpath來處理XML? – 2013-03-16 11:52:21

+0

如果可能在xpath中首先給他們優先... – 2013-03-16 13:03:38

回答

0

我真的不通過撥打瞭解您正在嘗試實現的目標3210,concattranslate在您的XPath表達式中。但是,如果你只是想列出的產品,其dist_map值大於給定值小於,等於或大於,下面應該工作:

var xPath = '//*[local-name() = "' + elName + '" and @value ' + ls + ' ' + value 
     + ']/../../@value'; 

這將創建一個類似的表達式:

//*[local-name() = "dist_map" and @value > 3]/../../@value' 

注這不會驗證輸入。因此,如果輸入的值不是數字,則可能導致XPath表達式無效。

+0

如果dist_map包含像'3,8,9'這樣的多個值,而不是如何在這個時候檢查,我們需要'conatain'或'concat' ... mi .. 。! – 2013-03-17 07:12:03

+0

檢查我的這個問題我也解決了我的這個問題的問題,但我得到問題時dist_map有多個屬性值http://stackoverflow.com/questions/15450480/xpath-contains-concat-not-work – 2013-03-17 07:16:27