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

时间:2013-10-08 17:25:08

标签: java javascript jquery xml

我们有一个webapp(标准的Spring MVC,Java) - 我写过 - 它以XML的形式返回对客户端(浏览器)的响应。响应使用JAXB等进行编组。

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

即所有来自'<'在thirdPartyStuff到最后的结束'>' - 需要提取。

经过多次尝试和大量调试 - 我得出结论,这是错误的做法。我相信我应该将响应的那部分包装在CDATA中并将其解压缩为 .text()关于什么是对象...目前我们正在使用jquery ......响应在AJAX调用时返回...

但也许它可以完成..目前我们正在试图在一个元素上调用.html(),而这个元素就像它的XML一样。

TIA。

: - )

以下是第三部分“us”和“xml”的响应结构应用数据。只有(& includes)来自“...... to” - 需要被提取并按原样(文本字符串)传递给第三方方法。

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


</xml>

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

实际上,数据是通过$ .ajax()调用返回的 - 但是这个测试说明了这种行为。 它生成一个“未捕获的TypeError:无法调用方法'替换未定义的” - 因为 在XML“节点”上没有innerHtml - 当然我认为这是绝对正确的,并且在此处记录jquery API文档。

注意 - 这对我来说在Chrome&amp; Windows上的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>

我想我最终会走这条路。

https://stackoverflow.com/a/14197860/366073

1 个答案:

答案 0 :(得分:0)

这里的答案对我有用。 https://stackoverflow.com/a/13193743/366073

(另见:https://stackoverflow.com/a/43468/366073) 我将花一些时间来研究它为什么会起作用,但假设我们在节点上进行迭代,然后简单地序列化它们。

总结问题不是“提取”节点,而是获取选择的字符串表示的方法,即序列化它 - 这是错误的。

在IE,FF&amp;中使用下面的代码段进行了测试Chrome和预期结果获得。现在将这个概括为我们的应用程序。已经采用了以下方法&amp;现在正在我们的应用程序中工作...

<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>