构造一个NOT语句来解析XML

时间:2015-09-04 07:38:28

标签: jquery

我试图构建一个语句,该语句将解析我的XML,查找所有不包含单词' HIDE'或者'取消'在标题'字段,并没有空白的索引'字段。

到目前为止,我已经尝试过这个作为起点,我认为这会过滤掉包含' HIDE'和一个空的索引字段,但它不起作用。

$(xml).find("Qry1:not(Title:contains('HIDE'), Indexed:contains(''))").each(function(){

我是否接近于此?

1 个答案:

答案 0 :(得分:1)

顺序方法怎么样?

$(xml).find("Qry1")
    .not(":has(Title:contains('HIDE'))")
    .not(":has(Title:contains('CANCELLED'))")
    .not(":has(Indexed:empty)")
    .each( /* ... */);

试一试:



var xml = "<root>\
  <Qry1>\
    <Title>HIDE</Title>\
    <Indexed>1</Indexed>\
  </Qry1>\
  <Qry1>\
    <Title>CANCELLED</Title>\
    <Indexed>1</Indexed>\
  </Qry1>\
  <Qry1>\
    <Title>I'm not indexed</Title>\
    <Indexed></Indexed>\
  </Qry1>\
  <Qry1>\
    <Title>Found Me!</Title>\
    <Indexed>1</Indexed>\
  </Qry1>\
</root>";

$(xml).find("Qry1")
    .not(":has(Title:contains('HIDE'))")
    .not(":has(Title:contains('CANCELLED'))")
    .not(":has(Indexed:empty)")
    .each(function () {
        var title = $(this).find("Title").text();
        $("<div>", {text: title}).appendTo("#target");
    });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="target"></div>
&#13;
&#13;
&#13;

您也可以使用.filter,如下所示:

$(xml).find("Qry1")
    .filter(function () {
        var $this = $(this), 
            title = $this.find("Title").text(),
            indexed = $this.find("Indexed").text();

        return !(title === "HIDE" || title === "CANCELLED" || !indexed);
    })
    .each( /* ... */);