2009-04-01 11 views
0

Grundsätzlich habe ich ein XML-Dokument und das einzige, was ich über das Dokument weiß, ist ein Attributname.Versatile XML-Attribut Regex mit Javascript

Angesichts dieser Informationen muss ich herausfinden, ob dieser Attributname existiert, und wenn es existiert, muss ich den Attributwert kennen.

zum Beispiel:

<xmlroot> 
    <ping zipcode="94588" appincome = "1750" ssn="987654321" sourceid="XX9999" sourcepw="ioalot"> 
    <status statuscode="Success" statusdescription="" sessionid="1234" price="12.50"> 
    </status> 
</ping> 
</xmlroot> 

Ich habe die Namen appincome und sourceid. Was sind die Werte?

Auch wenn es zwei appincome Attributnamen im Dokument gibt, muss ich das auch wissen, aber ich brauche ihre Werte nicht, nur dass mehr als eine Übereinstimmung existiert.

+0

xml.match (/ (?: sourceid =) ["']. *? ["']/ig) Ich habe dies, was nur sorta funktioniert – thirsty93

Antwort

3

Reguläre Ausdrücke sind möglicherweise nicht das beste Werkzeug dafür, besonders wenn Ihr JS in einigermaßen modernen Browsern mit XPath-Unterstützung läuft. Diese Regex sollte funktionieren, aber Vorsicht von Fehlalarmen, wenn Sie nicht eine strenge Kontrolle über den Inhalt des Dokuments haben Sie:

var match, rx = /\b(appincome|sourceid)\s*=\s*"([^"]*)"/g; 

while (match = rx.exec(xml)) { 
    // match[1] is the name 
    // match[2] is the value 

    // this loop executes once for each instance of each attribute 
} 

Alternativ versuchen, diese XPath, die Fehlalarme nicht erzeugen:

var node, nodes = xmldoc.evaluate("//@appincome|//@sourceid", xmldoc, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); 

while (node = nodes.iterateNext()) { 
    // node.nodeName is the name 
    // node.nodeValue is the value 

    // this loop executes once for each instance of each attribute 
} 
+0

Würde der Xpath mit einem Soap XML-Dokument arbeiten? – thirsty93

+0

Ich bin nicht SOAP-versiert, aber solange Sie ein DOM Document-Objekt haben, das Ihren XML-Code enthält, sollte es funktionieren (ich habe den Code bearbeitet, um das etwas klarer zu machen). –

+0

+1 für die xpath-Lösung. – elo80ka