Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 使用jQuery将xml文档转换回字符串_Javascript_Jquery_Xml - Fatal编程技术网

Javascript 使用jQuery将xml文档转换回字符串

Javascript 使用jQuery将xml文档转换回字符串,javascript,jquery,xml,Javascript,Jquery,Xml,我试图解析xml格式的字符串,删除其中一个元素,然后将其写回字符串。所有这些都使用标准jQuery函数。这是我似乎无法理解的最后一步 var $xml = $(somexmlstring); var element = $xml.find('name:contains("'+somevalue+'")'); element.remove(); var newxmlstring = $xml.dunno(); 我可以使用什么函数将$xml DOM转换回字符串?只要您的xml文档不包含额外的花哨

我试图解析xml格式的字符串,删除其中一个元素,然后将其写回字符串。所有这些都使用标准jQuery函数。这是我似乎无法理解的最后一步

var $xml = $(somexmlstring);
var element = $xml.find('name:contains("'+somevalue+'")');
element.remove();
var newxmlstring = $xml.dunno(); 

我可以使用什么函数将$xml DOM转换回字符串?

只要您的xml文档不包含额外的花哨名称空间,那么它就很简单:

var newxmlstring = $xml.html(); 

要帮助您修复JSFIDLE中的代码,请执行以下操作:

var data = '<value><url>foo</url><name>bar</name></value><value><url>foo</url><name>bar</name></value>'
var xml = $.parseXML('<root>' + data + '</root>');
var $xml = $(xml);
console.log('xml', $xml.find('root').html());
var数据='foobarfoobar'
var xml=$.parseXML(''+data+'');
var$xml=$(xml);
log('xml',$xml.find('root').html());
修复位于最后一行:`$xml.find('root').html()

如果先用父元素包装jQuery对象,然后调用父元素上的
.html()
,则可以使用
.html()

var $xml = $(somexmlstring);
$xml.find('name:contains("' + somevalue + '")').remove();
var newxmlstring = $('<x></x>').append($xml).html(); 
var$xml=$(somexmlstring);
$xml.find('name:contains(“+somevalue+”)).remove();
var newxmlstring=$('').append($xml.html();
即使原始XML字符串没有单个根元素,也可以这样做。但是,如果原始XML字符串包含XML声明(如
),则它不起作用


如果原始XML字符串是有效的XML文档,可以选择在开头包含XML声明,那么您可能希望创建如下jQuery对象:

var $xml = $($.parseXML(somexmlstring).documentElement);
$xml.find('name:contains("' + somevalue + '")').remove();
var newxmlstring = $('<x></x>').append($xml).html(); 
var$xml=$($.parseXML(somexmlstring.documentElement);
$xml.find('name:contains(“+somevalue+”)).remove();
var newxmlstring=$('').append($xml.html();

您不需要jquery来完成此操作,请使用XMLSerializer

new XMLSerializer().serializeToString(xmlobj.documentElement);

这是我尝试过的第一件事,但我无法让它发挥作用。我可以解析xml字符串、搜索节点等,但每当调用html()函数时,它似乎返回未定义的值。我可以调用text(),它将返回不带标记的xml节点的内容。浏览器说
innerHTML
没有
.replace()
属性…@AlexisWilke:这可能只是jquery和IE的问题,与回答中的代码无关。我认为XML和HTML之间存在差异,
HTML()
函数只需要HTML。。。当我尝试这样做时,我在一个真正的XML文档(不仅仅是HTML)上遇到了问题。可能是因为其中一个标记名为
,而它不在名为
@Alexiswillke的标记内:我对XML和HTML之间的这种差异感到相当沮丧。。。。事实上,在jQuery中,使用标记(例如,在HTML中不应该有子元素,但在XML中有子元素)(为什么不)对我来说完全是痴人说梦。。。必须承认,当时我们没有使用$.parseXML…..尝试使用JSFIDLE,但这只返回第一个节点,而不是返回进入的整个字符串:data!=$xml.wrap(“”).parent().html()$.parseXML(数据);将失败,因为数据不是正确的xml,它有多个节点,这就是为什么首先将字符串包装并将结果解析为xml:var xml=$.parseXML(“”+data+“”)@谢谢。我一定没注意到小提琴坏了。问题在于使用了
.wrap()
。它包装所有顶级节点。修复方法是使用
.append()
。关于要求XML字符串具有单个根元素的
$.parseXML()
也是正确的。