/ / Construindo uma instrução NOT para analisar XML - jquery

Construindo uma instrução NOT para analisar XML - jquery

Eu estou tentando construir uma instrução que analisará meu XML procurando todas as linhas que não contêm as palavras "ocultar" ou "CANCELLED" no campo "Título" e não tem um campo "Indexado" em branco.

Até agora eu tentei isso como um ponto de partida, que eu pensei que iria filtrar tudo o que contém "ocultar" e um campo indexado vazio, mas não funciona.

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

Eu estou perto de estar bem aqui?

Respostas:

1 para resposta № 1

Como sobre uma abordagem seqüencial?

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

Tente:

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>

Você também pode usar .filter, como isso:

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