0

我正在尝试获取元素图像属性。
从此 xml 文件:-

<products>
      <product_id value="1">
        <tab_id value="351">
          <tab_name value="test1"/>
          <region_timezone value="1"/>
          <registrationstatus value="2"/>
          <eventstatus value="2"/>
          <dist_activity value="4"/>
          <dist_activity value="10066"/>
          <dist_activity value="10070"/>
          <dist_region value="4909"/>
          <dist_region value="4902"/>
          <dist_region value="4905"/>
          <dist_value value="55"/>
          <dist_value value="342"/>
          <dist_value value="86"/>
          <image value="female.jpg"/>
       </tab_id>
     </product_id>
    <product_id value="2">
        <tab_id value="351">
          <tab_name value="test1"/>
          <region_timezone value="1"/>
          <registrationstatus value="2"/>
          <eventstatus value="2"/>
          <dist_activity value="4"/>
          <dist_activity value="10066"/>
          <dist_activity value="10070"/>
          <dist_region value="4912"/>
          <dist_region value="4908"/>
          <dist_region value="4901"/>
          <dist_value value="55"/>
          <dist_value value="342"/>
          <dist_value value="86"/>
          <image value="male.jpg"/>
        </tab_id>
      </product_id>
    </products>

这是我的 xpath:-

var xPath = '//*[local-name() = "dist_region" and ' +
                                        ' contains(concat(@value, ","), "' + array_top[i] + ',")]' + 
                                        '//Product_id[/image]/@value';

这是完整的代码:-

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script>
    var comma='';
    var node='';
    var result='';
    var output;

        var xml;
        $.get(
        "product.xml",
        null,
        function (data) {
            xml = data;
        },
        "xml"
    );
        function get_list() {
            var value = "4909,4902,4905";
            var array_top = value.split(',');
            for(var i=0;i<array_top.length;i++)
            {
                var xPath = '//*[local-name() = "dist_region" and ' +
                                        ' contains(concat(@value, ","), "' + array_top[i] + ',")]' + 
                                        '//Product_id[/image]/@value';
                                        alert(array_top[i]);
                    var iterator = xml.evaluate(xPath, xml.documentElement, null,
                            XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
                            var thisNode = iterator.iterateNext();
                            while (thisNode) {
                    node = thisNode.textContent;
                    thisNode = iterator.iterateNext();
                                result+= comma+node;
                                comma=',';

                            }
                            }
            output = result;
            alert(output);
        }
    </script>
</head>
<body>
    <input type="button" name="button" value="Search" onclick="get_list()">
    <div id="result">
    </div>
</body>
</html>

预期的 O/p:- female.jpg,male.jpg

在这里,我尝试从数组中一一传递 dist_region 值,如果它与我的 xml 文件匹配,则返回图像元素属性值。
请检查我的 x-path 并建议我。
谢谢。

4

3 回答 3

2

不确定我是否完全理解这个问题,但根据你的代码,你正在寻找的值是:“4909,4902,4905”,这并不意味着它应该返回female.jpg、female.jpg、female。 jpg?

您可以使用此 xpath 查找作为 dist_region 兄弟的图像文件(只需将 '4909' 替换为其他数字:

//dist_region[@value='4909']/following-sibling::image
于 2013-05-20T19:15:30.783 回答
1

您编写的 XPATH//Product_id[/image]/@value错误使用 //Product_id/tab_id/image/@value 获取female.jpg, and male.jpg

于 2013-05-16T10:24:10.850 回答
1

从 xapth 的角度来看,这似乎是您正在寻找的东西:

'//product_id [*/dist_region[contains(concat(@value, ","), $array_top )]]/tab_id/image/@value'

你的 javasrcipt var 应该是这样的:

'//product_id [*/dist_region[contains(concat(@value, ","), '
 + array_top[i] + 
')]]/tab_id/image/@value'

我仍然不知道你为什么需要包含()。也试试:

'//product_id [*/dist_region[@value = $array_top ]]/tab_id/image/@value'
于 2013-05-16T10:44:38.340 回答