如果元素属性值匹配则获取图像属性值

时间:2013-05-16 09:50:44

标签: xml xpath

我尝试获取元素图像属性 从这个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文件匹配则返回image元素属性值。
请检查我的x路径并建议我 谢谢。

3 个答案:

答案 0 :(得分:2)

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

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

//dist_region[@value='4909']/following-sibling::image

答案 1 :(得分:1)

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

答案 2 :(得分: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'

我仍然不知道你为什么需要contains()。 还可以尝试:

'//product_id [*/dist_region[@value = $array_top ]]/tab_id/image/@value'