/ / Konštrukcia príkazu NOT na analýzu XML - jquery

Vytvorenie príkazu NOT pre analýzu XML - jquery

Snažím sa skonštruovať príkaz, ktorý bude analyzovať moje XML a vyhľadá všetky riadky, ktoré neobsahujú slová „HIDE“ alebo „CANCELED“ v poli „Title“ a neobsahujú prázdne pole „Indexed“.

Zatiaľ som to vyskúšal ako východiskový bod, o ktorom som si myslel, že odfiltruje všetko, čo obsahuje „HIDE“ a prázdne indexované pole, ale nefunguje to.

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

Som dokonca blízko k tomu, aby som tu bol?

odpovede:

1 pre odpoveď č. 1

A čo sekvenčný prístup?

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

Skús to:

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");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="target"></div>

Môžete tiež použiť .filter, ako toto:

$(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( /* ... */);