小于,大于等于在XPath中无法正常工作

时间:2013-03-16 11:47:29

标签: xpath xquery

这是我的xml文件: -

   <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是: -
我输入第一个文本框dist_map
在第二个文本框3(其dist_map属性值)中 然后点击小于按钮它不给任何输出
如果单击grater-than按钮,则显示1,2(其product_id属性值)
这不是完美的o / p 这里o / p仅为1(其product_id属性值)bcoz 3小于5
如果单击等于按钮,则工作完美2(其product_id属性值)b'coz两个文本框值在xml文件中匹配
这里只有我的xpath或参数中的问题传递按钮,如(<>
请检查我的这个问题并帮助我解决这个问题。
谢谢

1 个答案:

答案 0 :(得分:0)

我真的不明白您在XPath表达式中调用containsconcattranslate时要实现的目标。但是,如果您只想列出dist_map值小于,等于或大于给定值的产品,则以下内容应该有效:

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

这将创建如下表达式:

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

请注意,这不会验证输入。因此,如果输入的值不是数字,则可能导致无效的XPath表达式。