使用RegExp从xml读取值

时间:2013-08-26 19:26:38

标签: javascript xml

我有一个带有键和值对的XML文档,我想提取特定对的值。

我试过了:

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

上面给出了d0dat1的值,但对于后续数据检索,它不会返回正确的值。

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

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

更新: 我有以下xml字符串:

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

现在,内置的xml解析方法适用于我的mozilla和chrome,但对于IE,它无法解析字符串。例如,在IE上,如果我使用它,它将变为null:

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

1 个答案:

答案 0 :(得分: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