Универсальный атрибут регулярных выражений XML с JavaScript - PullRequest
0 голосов
/ 02 апреля 2009

В основном у меня есть документ XML, и единственное, что я знаю о документе, это имя атрибута.

Учитывая эту информацию, я должен выяснить, существует ли имя этого атрибута, и если оно существует, мне нужно знать значение атрибута.

например:

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

У меня есть имена appincome и sourceid. Какие значения?

Также, если в документе есть два имени атрибутов appincome, мне тоже нужно это знать, но мне не нужны их значения, просто существует более одного совпадения.

1 Ответ

3 голосов
/ 02 апреля 2009

Регулярные выражения могут быть не лучшим инструментом для этого, особенно если ваш JS работает в достаточно современных браузерах с поддержкой XPath. Это регулярное выражение должно работать, но остерегайтесь ложных срабатываний, если у вас нет жесткого контроля над содержанием документа:

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
}

Или попробуйте этот XPath, который не будет выдавать ложных срабатываний:

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
}
...