【问题标题】:Use RegExp to read value from xml使用 RegExp 从 xml 中读取值
【发布时间】:2013-08-27 04:59:28
【问题描述】:

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

我试过了:

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

以上为dat1 中的d0 提供了值,但对于后续数据检索,它不会返回正确的值。

那么,第一个问题是:我可以使用什么方法通过 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

【问题讨论】:

  • 只是为了获取您不想使用替换方法的值...它只是破坏了字符串...您能否提供一个示例字符串以便我可以将其用作示例?
  • 我现在穿着我的 XML Unicorn 衬衫,不是开玩笑
  • 如果我的回答解决了您的问题,我建议您点击复选框接受它。否则,请提供更多信息,说明为什么它不起作用。

标签: javascript xml


【解决方案1】:

不建议使用正则表达式解析 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

【讨论】:

  • 没有问题的jQuery标签,请说明这是使用此方法的要求。
  • 添加了非 jQuery 示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多