0

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

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

即从thirdPartyStuff 中的'<' 到最后的'>' 的所有内容- 都需要提取。

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

但也许它可以做到......目前我们正在尝试在一个元素上调用 .html() 时绊倒 - 作为它的 XML - 落在一个堆中。

TIA。

:-)

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

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


</xml>

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

实际上,数据是通过 $.ajax() 调用返回的——但是这个测试说明了这种行为。它会生成一个“未捕获的类型错误:无法调用未定义的方法'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>

我想我最终会走这条路。

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

4

1 回答 1

0

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

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

总而言之,问题不是“提取”节点,而是获取选择的字符串表示形式的方法,即对其进行序列化 - 这是错误的。

已在 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>
于 2013-10-08T21:18:21.610 回答