Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中读取XML服务器响应?_Java_Javascript_Ajax_Xml - Fatal编程技术网

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

如何在JavaScript中读取XML服务器响应?,java,javascript,ajax,xml,Java,Javascript,Ajax,Xml,我从事一个web项目,此时我需要将一个硬编码的xml从Java传递到JavaScript,以解析该xml;问题是我不知道该怎么做。如下所示,我的xml存储在一个字符串变量中,因此我需要将该变量传递给JavaScript。 我使用tomcat作为服务器 Java代码—创建xml的代码: @Path("/getXml") @GET @Produces(MediaType.TEXT_XML) @Consumes(MediaType.TEXT_PLAIN) public String getXml(@C

我从事一个web项目,此时我需要将一个硬编码的xml从Java传递到JavaScript,以解析该xml;问题是我不知道该怎么做。如下所示,我的xml存储在一个字符串变量中,因此我需要将该变量传递给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;
    }

}

您可以通过jQuery解析xml。Ref:

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

  var content = xml_string;//your xml string variable                       

    if (typeof content == 'string') {
    content = ( new window.DOMParser() ).parseFromString(content, "text/xml");
    } 
您可以轻松地使用它来解析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  
        }  
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
var xml=$.parseXML(“填充条”);
var x=xml.getElementsByTagName('item');

for(i=0;这“简单”的方法是切换到JSON。
XMLHttpRequest
s包括for XML响应。如果提供了有效的响应,它应该包含从XML创建的DOM文档。谢谢。我找到了“getXml”捕捉的位置。我删除了“try-catch”语句,现在可以访问我的字符串了;这很奇怪。
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