如何在 JavaScript 中读取 XML 服务器响应?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25280911/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 04:17:03  来源:igfitidea点击:

How to read XML server response in JavaScript?

javajavascriptajaxxml

提问by Alex Thomason

I work on a web project and at this point I need to pass a hard-coded xml from Java to JavaScript to parse that xml; the problem is that I don't know exactly how to do this. As shown below, my xml is stored in a String variable, so I need to pass this variable to JavaScript. I'm using tomcat as a server.

我在一个 web 项目上工作,此时我需要将一个硬编码的 xml 从 Java 传递到 JavaScript 来解析该 xml;问题是我不知道如何做到这一点。如下图,我的xml存储在一个String变量中,所以我需要把这个变量传递给JavaScript。我使用 tomcat 作为服务器。

Java Code - that creates xml:

Java 代码 - 创建 xml:

@Path("/getXml")
@GET
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.TEXT_PLAIN)
public String getXml(@Context HttpServletRequest request) throws TransformerConfigurationException, TransformerException{

    try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        Document document = docBuilder.newDocument();
        Element rootElement = document.createElement("news-counts");
        document.appendChild(rootElement);

        int j=12;
        for(int i=1; i<10; i++) {
            Element item = document.createElement("item");
            rootElement.appendChild(item);
            item.setAttribute("count", "" + j);
            item.setAttribute("date", "201408" + "0" + i);
            j=j+2;
        }

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        // transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(document), new StreamResult(writer));
        String xmlOutput = writer.getBuffer().toString().replaceAll("\n|\r", "");

       // return Response.status(Status.NOT_ACCEPTABLE).entity("xmlOutput").build();        
       //System.out.println(xmlOutput);

        return xmlOutput;        

    } catch (ParserConfigurationException ex) {
        Logger.getLogger(Searcher.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        return null;
    }

}

JavaScript code - how I tried to acces the xmlOutput variable

JavaScript 代码 - 我如何尝试访问 xmlOutput 变量

function test() {

var r=new XMLHttpRequest();
r.open("GET", "http://localhost:8080/WebApplication6/tavi/searcher/getXml" , false);

r.send(); 
var responseText = r.responseText;
alert(responseText);
}

回答by Ken de Guzman

You can easily use Jqueryfor parsing xml. Heres another one Easy XML Consumption using jQuery. If you prefer pure javascript look at this thread.

您可以轻松地使用Jquery来解析 xml。这是另一个使用 jQuery 的 Easy XML Consumption。如果您更喜欢纯 javascript,请查看此线程

Using Jquery:

使用jQuery:

    var xml = $.parseXML("<news-counts><item count=\"1\" date=\"2014-08-13 00:00:00\">Stuff</item><item count=\"2\" date=\"2014-08-13 01:01:01\">Bar</item></news-counts>");
    var x = xml.getElementsByTagName('item');
    for(i=0;i<x.length;i++)
        {
        console.log(x.item(i).textContent); //Stuff Bar
        console.log(x.item(i).getAttribute('count')); //1 2
        console.log(x.item(i).getAttribute('date')); //2014-08-13 00:00:00  2014-08-13 01:01:01  
        }  

Using javascript:

使用javascript:

var parseXml;
    if (typeof window.DOMParser != "undefined") {
        parseXml = function(xmlStr) {
            return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
        };
    } else if (typeof window.ActiveXObject != "undefined" &&
           new window.ActiveXObject("Microsoft.XMLDOM")) {
        parseXml = function(xmlStr) {
            var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(xmlStr);
            return xmlDoc;
        };
    } else {
        throw new Error("No XML parser found");
    }
    var xml = parseXml("<news-counts><item count=\"1\" date='2014-08-13 00:00:00'>Stuff</item><item count=\"2\" date='2014-08-13 00:00:00'>Bar</item></news-counts>");//get attributes or contents after this line

回答by Gauri Deshmukh

You can parse your xml in javascript by this way -

您可以通过这种方式在 javascript 中解析您的 xml -

  var content = xml_string;//your xml string variable                       

    if (typeof content == 'string') {
    content = ( new window.DOMParser() ).parseFromString(content, "text/xml");
    }