Javascript 中的 XML 解析

发布于 2024-08-16 03:00:37 字数 643 浏览 2 评论 0原文

我正在尝试解析来自 XMLHttpRequest (对于 Firefox 扩展)的 xml。在以下代码中,req 是一个 XMLHttpRequest 对象。我在声明 req 后执行了 req.overrideMimeType("text/xml");

var shortURL;  
var xmlDoc = document.implementation.createDocument("","",null);  
xmlDoc.async = false;  
xmlDoc = req.responseXml;  
if (xmlDoc.readyState == 4){  
    shortURL = xmlDoc.documentElement.childNodes[8].text;  
}

如果我使用 req.responseXml,在 xmlDoc = req.responseXml; 之后的行会收到一条错误消息,提示“xmlDoc 未声明” 如果我使用 req.responseTextxmlDoc.readyState == 4 变为 false。

我不怎么使用 javascript,所以请告诉我我是否在这里做错了什么。

I'm trying to parse an xml coming from an XMLHttpRequest (for a Firefox extension). In the following code, req is an XMLHttpRequest object. I did req.overrideMimeType("text/xml"); after declaring req.

var shortURL;  
var xmlDoc = document.implementation.createDocument("","",null);  
xmlDoc.async = false;  
xmlDoc = req.responseXml;  
if (xmlDoc.readyState == 4){  
    shortURL = xmlDoc.documentElement.childNodes[8].text;  
}

If I use req.responseXml I get an error saying "xmlDoc is not declared" for the line after xmlDoc = req.responseXml; If I use req.responseText, xmlDoc.readyState == 4 turns false.

I don't do much of javascript so please tell me if I'm doing something wrong here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼泪也成诗 2024-08-23 03:00:38

需要使用 DOM 吗?如果没有,请使用 E4X。就像

shortURL = new XML(req.responseText).child(8).text();

如果响应包含 XML 声明 () 一样简单,请改用以下内容:

shortURL = new XML(req.responseText.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "")).child(8).text();

Do you need to use the DOM? If not, use E4X. It's as simple as

shortURL = new XML(req.responseText).child(8).text();

If the response includes an XML declaration (<?xml version="...">), use this instead:

shortURL = new XML(req.responseText.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "")).child(8).text();
回梦 2024-08-23 03:00:37

我通常更喜欢使用 responseText,然后使用浏览器内置的 XML 解析库来解析 XML。之后,我通常将生成的 XML 文档树或子树转换为 JSON,以便在 JavaScript 中轻松访问。

我在这里为此编写了一个小型实用程序库:

http://earth-api-samples.googlecode.com/svn/trunk/demos/myearth/lib/xmlutil.js

用法非常简单:

var json = xmlNodeToJson(parseXml(req.responseText);

I generally prefer using responseText and then parsing the XML using the browser's built in XML parsing library. After that, I generally convert the resulting XML document tree, or a sub tree, to JSON for easy access in JavaScript.

I wrote a tiny utility library for this here:

http://earth-api-samples.googlecode.com/svn/trunk/demos/myearth/lib/xmlutil.js

The usage is pretty simple:

var json = xmlNodeToJson(parseXml(req.responseText);
等风也等你 2024-08-23 03:00:37

Hai chanux,

希望这能帮助您了解 xml 解析器的基础知识

http://www.hiteshagrawal.com/javascript/javascript-parsing-xml-in- javascript

AJAX responseXML 错误

或尝试更改

shortURL = xmlDoc.documentElement.childNodes[8].Text;

shortURL = xmlDoc.documentElement.childNodes[8].firstChild.nodeValue;

或使用此函数并为您更改它。 ..

function parseXML()
    {
        if (xmlDoc.readyState == 4 && xmlDoc.status == 200)
        {
                xmlDoc = xmlDoc.responseXML;
                regions = xmlDoc.getElementsByTagName("region");
                for (var i = 0; i < regions.length; i++)
                {
                    if (regions[i].getAttribute("id") == regID)
                    {
                        var browserName = navigator.userAgent;
                        var isIE = browserName.match(/MSIE/);
                        if (isIE)
                        {
                            var hotelprice = regions[i].childNodes[0].firstChild.nodeValue;
                            var pkgprice = regions[i].childNodes[1].firstChild.nodeValue;

                        }
                        else
                        {
                            var hotelprice = regions[i].childNodes[1].textContent;
                            var pkgprice = regions[i].childNodes[3].textContent;
                        }
                        document.getElementById("hotel").innerHTML = "$"+hotelprice;
                        document.getElementById("package").innerHTML = "$"+pkgprice;   
                    }
                }
        }
    }

Hai chanux,

May this will help you to know basics of xml parser

http://www.hiteshagrawal.com/javascript/javascript-parsing-xml-in-javascript

AJAX responseXML errors

or try changing

shortURL = xmlDoc.documentElement.childNodes[8].Text;

to

shortURL = xmlDoc.documentElement.childNodes[8].firstChild.nodeValue;

or use this function and change it for yours...

function parseXML()
    {
        if (xmlDoc.readyState == 4 && xmlDoc.status == 200)
        {
                xmlDoc = xmlDoc.responseXML;
                regions = xmlDoc.getElementsByTagName("region");
                for (var i = 0; i < regions.length; i++)
                {
                    if (regions[i].getAttribute("id") == regID)
                    {
                        var browserName = navigator.userAgent;
                        var isIE = browserName.match(/MSIE/);
                        if (isIE)
                        {
                            var hotelprice = regions[i].childNodes[0].firstChild.nodeValue;
                            var pkgprice = regions[i].childNodes[1].firstChild.nodeValue;

                        }
                        else
                        {
                            var hotelprice = regions[i].childNodes[1].textContent;
                            var pkgprice = regions[i].childNodes[3].textContent;
                        }
                        document.getElementById("hotel").innerHTML = "$"+hotelprice;
                        document.getElementById("package").innerHTML = "$"+pkgprice;   
                    }
                }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文