Frage

Sagen Sie, wir haben das folgende XML:

<people>
 <person>
  <name>Jake</name>
  <skills>
   <skill>JavaScript</skill>
   <skill>HTML</skill>
   <skill>Flex</skill>
   <skill>CSS</skill>
  </skills>
 </person>
 <person>
   <name>John</name>
   <skills>
    <skill>C++</skill>
    <skill>Foxpro</skill>
   </skills>
 </person>
 <person>
  <name>Josh</name>
  <skills>
   <skill>JavaScript</skill>
   <skill>XML</skill>
   <skill>Flex</skill>
  </skills>
 </person> 
</people>

Was ich mit E4X tun möchte, ist, alle Personenobjekte zu finden, die mit einer Liste/einer Reihe von Fähigkeiten übereinstimmen, die ich übergibt. Sagen Sie also, ich möchte alle Menschen mit HTML- oder JavaScript -Fähigkeiten finden.

Ich weiß, ich kann es tun:

people.person.(descendants("skill").contains("HTML"))

oder

people.person.(descendants("skill").contains("JavaScript"))

Aber ich möchte es wirklich (/muss) eine Zeile machen (es ist Teil einer XMllistCollection -Filterfunktion in Flex).

So etwas wäre ideal

people.person.(descendants("skill").contains("HTML","JavaScript"))

Obwohl ich Variationen dieses Themas ausprobiert habe und nirgendwo hinkam. Was großartig wäre, wäre:

people.person.(descendants("skill").in("HTML", "JavaScript"))

oder sowas ähnliches.

Weiß jemand, ob das, was ich tue, möglich ist?

Ich möchte wirklich vermeiden, dort meine eigenen Schleifen hinzuzufügen.

Jake

War es hilfreich?

Lösung

Überprüfte dies nicht mit dem Compiler, aber das sollte Arbeit...

people.person.(descendants("skill").contains("HTML") || descendants("skill").contains("JavaScript"))

Hier ist eine weitere Einstellung -

Wenn Sie sich gegen ein Array innerhalb der E4X -Erklärung überprüfen möchten, haben Sie wohl kein Glück mehr. Es gibt jedoch eine mögliche Problemumgehung, aber es beinhaltet jedoch die Verwendung einer benutzerdefinierten Funktion innerhalb des E4X und einfach, die Schleife einfach außerhalb Ihres Hauptcodeblocks zu verschieben. Irgendwie überflüssig, wenn Sie wirklich Schleifen vermeiden möchten.

var skillsArray:Array = ["HTML", "JavaScript"];
var peopleWithSkills:XMLList = people.person.(matchSkills(descendants("skill"), skillsArray));

function matchSkills(xmlList:XMLList, skillsArray:Array):Boolean
{
    for each (var personSkill:XML in xmlList)
    {
        if (skillsArray.indexOf(personSkill.toString()) > -1)
        {
            return true;
        }
    }

    return false;
}

Mein bester Vorschlag wäre es, wirklich in Ihr Herz zu schauen und zu entscheiden, ob Sie brauchen Um die Schleifen zu vermeiden, oder wenn Sie sie nur vermeiden möchten. ;))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top