2013-08-26 2 views
0

У меня есть XML-документ с парами ключей и значений, и я хочу извлечь значение для определенной пары.Использовать RegExp для чтения значения из xml

Я пробовал:

var dat1 = xmlDoc.replace(/.*<d0>([^<]*)<\/d0>.*/, "$1"); 

выше дает мне значение d0 в dat1, но для поиска последующих данных, он не возвращает правильные значения.

Итак, первый вопрос: какой метод я могу использовать для извлечения значений из XML-документа с помощью regexp (да, мне нужно использовать regedt)?

Правилен ли метод замены выше?

Update: я следующий XML-строка приходит в:

<dataVal><d0>123</d0><d1>456</d1></dataVal> 

Теперь, встроенные методы XML разбора работает для меня Mozilla и хром, но для IE не в состоянии разобрать строку. Например, в IE он получает значение null, если я использую:

var dat1 = xmlDoc.getElementsByTagName('d0')[0].firstChild.nodeValue 
+0

только для того, чтобы получить значение, которое вы не хотите использовать метод replace ... он просто разбивает строку ... Можете ли вы предоставить образец строки, чтобы я мог использовать ее в качестве примера? – abc123

+0

Я ношу свою рубашку в формате XML Unicorn прямо сейчас не шучу – Pointy

+0

, если мой ответ решил вашу проблему, я рекомендую установить флажок, чтобы принять его. в противном случае, пожалуйста, предоставьте дополнительную информацию о том, почему это не сработает. – smcg

ответ

3

Не рекомендуется анализировать XML с помощью регулярных выражений. Вместо этого используйте синтаксический анализатор XML. Простой пример с JQuery (очевидно, требует JQuery):

var xml = "<music><album>Beethoven</album></music>"; 

var result = $(xml).find("album").text(); 

Пример использования браузера построен в DOM:

<!DOCTYPE html> 
<html> 
    <body> 
     <script> 
      text = "<bookstore><book>"; 
      text = text + "<title>Galapagos</title>"; 
      text = text + "<author>Kurt Vonnegut</author>"; 
      text = text + "<year>1985</year>"; 
      text = text + "</book></bookstore>"; 
      var xmlDoc, bookTitle; 
      if (window.DOMParser) { 
       parser = new DOMParser(); 
       xmlDoc = parser.parseFromString(text, "text/xml"); 
      } else // Internet Explorer 
      { 
       xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
       xmlDoc.async = false; 
       xmlDoc.loadXML(text); 
      } 
      bookTitle = xmlDoc.getElementsByTagName("title")[0].childNodes[0].data; 
      document.write(bookTitle); 
     </script> 
    </body> 
</html> 

Обязательная ссылка, почему с использованием регулярных выражений с XML (и HTML) является плохой идеей: RegEx match open tags except XHTML self-contained tags

+0

no jQuery tag на вопрос, пожалуйста, укажите это, это требование для использования этого метода. – abc123

+0

добавлен пример non-jQuery – smcg

+0

+1 для обеспечения правильных методов на двух языках. – abc123