我们有一个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>
我想我最终会走这条路。
答案 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>