2013-08-26 35 views
0

我有一个带有键和值对的XML文档,我想提取特定对的值。使用RegExp从xml读取值

我想:以上

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

让我对d0价值dat1,但后续的数据检索,它不会返回正确的值。

所以,第一个问题是:我可以使用什么方法通过使用regexp从XML文档提取值(是的,我需要使用regedt)?

以上使用的替换方法是否正确?

更新: 我有以下XML字符串在未来:

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

现在,内置的XML解析方法适用于我要Mozilla和Chrome,但IE浏览器是无法解析字符串。例如,如果我使用IE,它会变为空:

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

只是为了得到你不想使用替换方法的值...它只是打破了字符串...你能提供一个示例字符串,所以我可以用它作为例子吗? – abc123

+0

我现在穿着我的XML独角兽衬衫没有笑话 – Pointy

+0

如果我的答案解决了您的问题,我建议您点击复选框接受它。否则,请提供更多信息,为什么它不起作用。 – smcg

回答

3

不推荐使用正则表达式解析XML。改为使用XML解析器。使用jQuery基本的例子(显然需要jQuery的):建于DOM

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

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

例使用浏览器:

<!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

没有问题的jQuery标记,请说明这是使用此方法的要求。 – abc123

+0

添加了非jQuery示例 – smcg

+0

+1,用于以两种语言提供适当的方法。 – abc123