0

これは私の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';

3 つのボタンと 2 つのテキスト ボックスがあり、コードは次のとおりです。

<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
に 2 番目のテキスト ボックス3(その dist_map 属性値)に入力し
、それよりも小さいボタンを
クリックします1,2。属性値)
これは完全ではない o/p です。
ここで o/p は1(その product_id 属性値) だけです bcoz 3 は to より小さく、5
等しいボタンをクリックすると完璧に動作します2(その product_id 属性値)b'coz 両方のテキストボックス値が xml ファイルで一致します
ここでのみ問題があります私のxpathまたは引数は、(<>)のようなボタンで渡します
この質問をチェックして、これを解決するのを手伝ってください...
ありがとう

4

1 に答える 1

0

containsへの呼び出しconcattranslateXPath 式で何を達成しようとしているのか、私にはよくわかりません。dist_mapただし、値が特定の値より小さい、等しい、または大きい製品をリストしたいだけの場合は、次のように動作するはずです。

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

これにより、次のような式が作成されます。

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

これは入力を検証しないことに注意してください。そのため、たとえば、入力された値が数値でない場合、無効な XPath 式になる可能性があります。

于 2013-03-16T16:35:26.810 に答える