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

How to read XML server response in JavaScript?

本文关键字:XML 服务器 响应 读取 JavaScript      更新时间:2023-09-26

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

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代码-我如何尝试访问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);
}

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

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

您可以轻松地使用Jquery解析xml。这是另一个使用jQuery的简单XML消费。如果你更喜欢纯javascript,看看这个线程。

使用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  
        }  
使用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

可以使用jQuery解析xml。裁判:http://www.jquerybyexample.net/2012/04/read-and-process-xml-using-jquery-ajax.html