Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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_Jquery_Xml - Fatal编程技术网

使用Javascript提取整个XML节点内容

使用Javascript提取整个XML节点内容,java,javascript,jquery,xml,Java,Javascript,Jquery,Xml,我们有一个webapp(标准SpringMVC,Java)——我已经写过了——它以XML的形式向我们的客户机(浏览器)返回响应。响应是使用JAXB等进行编组的 在ui中——为了与第三方软件交互,我们需要将部分XML原样传递到javascript方法中 即,从“”开始的所有内容都需要提取 经过无数次的尝试和调试,我得出结论,这是一种错误的方法。我认为我应该将响应的这一部分包装在CDATA中,并将其提取为 .text()在任何对象上。。。目前我们正在使用jquery。。。响应在AJAX调用中返回 但

我们有一个webapp(标准SpringMVC,Java)——我已经写过了——它以XML的形式向我们的客户机(浏览器)返回响应。响应是使用JAXB等进行编组的

在ui中——为了与第三方软件交互,我们需要将部分XML原样传递到javascript方法中

即,从“”开始的所有内容都需要提取

经过无数次的尝试和调试,我得出结论,这是一种错误的方法。我认为我应该将响应的这一部分包装在CDATA中,并将其提取为 .text()在任何对象上。。。目前我们正在使用jquery。。。响应在AJAX调用中返回

但也许这是可以做到的。。目前,我们正在尝试对一个元素调用.html(),该元素作为其XML落入堆中

蒂亚

:-)

下面是“us”的响应结构应用程序数据和第三部分的“xml”。只需提取“…to”-中的(&包括),并按原样(文本字符串)传递给第三方方法

<xml>
  <someNode>
     <ourStuff veryUseful="true"/>
     <thirdPartyStuff a="1" b="2">
       <moreStuff/>
       <evenMoreStuff/>
     </thirdPartyStuff>
  </someNode>


</xml>

下面是一个失败的测试,基本上说明了我的无知。因此,console.log当然必须失败

实际上,数据是通过$.ajax()调用返回的,但是这个测试演示了这种行为。 它生成了一个“uncaughttypeerror:无法调用undefined的方法'replace'”——因为XML“节点”上没有innerHtml——我当然认为这是绝对正确的,并在jquery API文档中记录了这一点

注意-这对我来说在Windows上的Chrome&IE中是失败的,但在Firefox(Mac OS)上是有效的

 <html>

<head>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

    <script type="text/javascript">

        function hackit() {
            var data = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
                    "<xml>" +
                    "<thirdParty>" +
                    "<blah a=\"0\" b=\"0\">" +
                    "</blah>" +
                    "</thirdParty>" +
                    "</xml>";

            $xmlData = $.parseXML(data);
            $data = $($xmlData);
            var thing = $data.find("thirdParty");

            console.log(thing.html());

        }
    </script>
</head>
<body onload="hackit()">

Loaded.

</body>
</html>

函数hackit(){
var data=“”+
"" +
"" +
"" +
"" +
"" +
"";
$xmlData=$.parseXML(数据);
$data=$($xmlData);
var thing=$data.find(“第三方”);
log(thing.html());
}
加载。
我想我最终会走这条路


这里的答案对我很有用

(另见:) 我将花一些时间研究为什么这样做,但假设我们在节点上迭代,然后简单地序列化它们

总而言之,问题不是“提取”节点,而是获取选择的字符串表示形式(即序列化)的方法是错误的

在IE、FF和Chrome中使用下面的代码片段进行了测试,并获得了预期结果。现在,我们将把它推广到我们的应用程序中。已采用以下方法&现在正在我们的应用程序中工作

<html>

<head>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

    <script type="text/javascript">

        function serializeXmlNode(xmlNode) {
            if (typeof window.XMLSerializer != "undefined") {
                return new window.XMLSerializer().serializeToString(xmlNode);
            } else if (typeof xmlNode.xml != "undefined") {
                return xmlNode.xml;
            }
            return "";
        }


          function hackit() {

        var data = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
                "<xml>" +
                "<ourStuff>" +
                "<blah a=\"x\" b=\"y\">" +
                "</blah>" +
                "</ourStuff>" +
                "<thirdParty>" +
                "<blah a=\"0\" b=\"0\">" +
                "</blah>" +
                "</thirdParty>" +
                "</xml>";

        var xmlData = $.parseXML(data);

        var thirdPartyNode = $(xmlData).find("thirdParty blah")[0];
        console.log(serializeXmlNode(thirdPartyNode));

        var ourNode = $(xmlData).find("ourStuff blah")[0];
        console.log(serializeXmlNode(ourNode));

    }
    </script>
</head>
<body onload="hackit()">

Loaded.

</body>
</html>

函数序列化xmlNode(xmlNode){
if(typeof window.XMLSerializer!=“未定义”){
返回新的window.XMLSerializer().serializeToString(xmlNode);
}else if(typeof xmlNode.xml!=“未定义”){
返回xmlNode.xml;
}
返回“”;
}
函数hackit(){
var data=“”+
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"";
var xmlData=$.parseXML(数据);
var thirdPartyNode=$(xmlData).find(“第三方blah”)[0];
log(序列化xmlnode(thirdPartyNode));
var ourNode=$(xmlData).find(“ourStuff blah”)[0];
log(序列化xmlnode(ourNode));
}
加载。

Java!=Javascript:)更重要的是,XML!=HTML。使用JS在XML中检查并显示所需信息是有意义的,但是我不知道调用.html()会发生什么。也许你可以澄清一下你在这一步做什么?HTML是如何进入的?不是,他想得到someNode内容的字符串形式,以便发送。当然,最接近jQuery的方法是.html,因此他尝试了它;“目前,我们在尝试调用元素上的.html()时遇到了麻烦”。用XML调用.html()是什么?为什么?添加了一个工作。。。未能通过测试,说明我正在剥皮的树是错误的。:-)