Javascript XML到jQuery再到字符串?

Javascript XML到jQuery再到字符串?,javascript,jquery,xml,Javascript,Jquery,Xml,我将其作为XML: <explination> <p>This is a great tool</p> <p>and i love it</p> </explination> 这很好,但是当我将它传递给我前面提到的疯狂转换器时,它失败了,因为它无法处理children()返回的数组 有没有办法将children()返回的内容转换为标准xml?一个$.toXml()方法还是什么 有什么建议吗 谢谢这里有一种使用jQu

我将其作为XML:

<explination>
  <p>This is a great tool</p>
  <p>and i love it</p>
</explination>
这很好,但是当我将它传递给我前面提到的疯狂转换器时,它失败了,因为它无法处理children()返回的数组

有没有办法将children()返回的内容转换为标准xml?一个$.toXml()方法还是什么

有什么建议吗


谢谢

这里有一种使用jQuery函数的方法:

var contentAsString = $($.parseXML(xml)).find("explination").html();
$.parseXML()
返回一个XML文档,因此如果您将其输入到
$()
中,您将返回一个jQuery对象,这样您就可以使用jQuery遍历方法获取您关心的元素,然后使用
.html()
将其内容作为包含标记的字符串

或者,对于您显示的特定xml输入,您可以假装xml是html,然后执行以下操作:

var contentAsString = $(xml).html();
请注意,这两种方法都不需要“疯狂的转换器”

“它失败,因为它无法处理子项()返回的数组。”


.children()
不返回数组,它返回一个jQuery对象(类似于数组)。

如果要将内容提取为字符串,也许可以执行以下操作:

var doc = $($.parseXML(xml));
var content = $("<p>").append(doc.find("p").clone()).html();
var doc=$($.parseXML(xml));
var content=$(“”).append(doc.find(“p”).clone()).html();

这里有一个小提琴来演示:

我尝试了您描述的内容,但是Jquery.html()函数忽略了小写的节点字符。我需要一些东西以区分大小写的方式将XML解析为字符串,所以我开发了自己的下一个插件。将下一个代码复制到文件并另存为.js文件

/* 
 * THIS COMES WITH ABSOLUTELY NO WARRANTY.
 * 
 * This JQuery plugin just provides an easy way to parse an XML document object 
 * into a case sensitive string.
 * Self closing is not detected, and will be stringifyed as an empty xml node.
 * 
 * Tested in the following browsers:
 * -Chrome (v 33.0.1750.154 m)
 * -IE9 (v 9.0.8112.16421)
 * -Firefox (v 28.0)
 * -Opera (v 12.16)
 * -Safari (v 5.1.7 (7534.57.2))
 * 
 * @author Germán Coines Laguna - german.coines@hotmail.com
 * 
 * @usage $.fn.xmlToString(xmlObj)
 * @param xmlObj - An XML document object
 * @returns The Xml stringifyed.
 * 
 * @version 1.0
 * @depends JQuery v.1.9.1
 */
(function($){

  $.fn.xmltostring = function(xml)
  {
    var xmlText = "";

    $(xml).children().each(function(i,node){
      stringifyNode(node);
    });

    function stringifyNode(nd)
    {
      //obtain analisys obj
      var az = analyzeNode(nd);

      xmlText += "<" + az.nm + " " + az.ats + ">";

      if(az.chd) $(nd).children().each(function(i, ch){
        stringifyNode(ch);
      });

      xmlText += "</" + az.nm + ">";
    }

    function analyzeNode(nodeObj)
    {
      var obj = {nm: "", ats:"", chd: false, txt: ""};

      //Name
      obj.nm = nodeObj.nodeName;
      //Attributes
      $(nodeObj.attributes).each(function(i, at){
        obj.ats += at.name + "=\"" + at.value + "\" ";
      });
      //Children
      obj.chd = $(nodeObj).children().length > 0;
      //Text
      obj.txt = $(nodeObj).text();      

      return obj;
    }

    return xmlText;
   };  

 }(jQuery));
/*
*这是绝对没有保证的。
* 
*这个JQuery插件只是提供了一种解析XML文档对象的简单方法
*转换为区分大小写的字符串。
*未检测到自动关闭,将字符串化为空xml节点。
* 
*在以下浏览器中测试:
*-铬(V33.0.1750.154米)
*-IE9(V9.0.8112.16421)
*-Firefox(V28.0)
*-歌剧(12.16节)
*-狩猎(第5.1.7节(7534.57.2))
* 
*@作者germanán铸币拉古纳-德语。coines@hotmail.com
* 
*@usage$.fn.xmlToString(xmlObj)
*@param xmlObj-一个XML文档对象
*@返回字符串化的Xml。
* 
*@version 1.0
*@JQuery v.1.9.1
*/
(函数($){
$.fn.xmltostring=函数(xml)
{
var xmlText=“”;
$(xml).children().each(函数(i,节点){
字符串化节点(node);
});
函数字符串化节点(nd)
{
//获取分析对象
var az=分析节点(nd);
xmlText+=”;
if(az.chd)$(nd).children().each(函数(i,ch){
弦化节点(ch);
});
xmlText+=”;
}
函数分析器节点(nodeObj)
{
var obj={nm:,ats:,chd:false,txt:};
//名字
obj.nm=nodeObj.nodeName;
//属性
$(nodeObj.attributes)。每个(函数(i,at){
obj.ats+=at.name+“=\”+at.value+“\”;
});
//孩子们
obj.chd=$(nodeObj).children().length>0;
//正文
obj.txt=$(nodeObj.text();
返回obj;
}
返回xmlText;
};  
}(jQuery));
我还没有测试timmings是否有这么大的XML文件,但它满足了我的要求

希望能有帮助

下面是一个如何使用它的示例(注意,您必须注册JQuery.js文件,即使用上述代码保存的文件,并用所需的值替换“yourPathToFile/yourFileName.xml”):


$(文档).ready(函数(){
var xml=loadXMLDoc(“yourPathToFile/yourFileName.xml”);
警报($.fn.iwebxmltostring(xml));
//var test=$.parseXML($(“#结果”).text();
//警报($(test.children().prop('nodeName'));
});      

再见

因此,我通过ajax加载这些xml文档,您建议我使用什么数据类型?我已经尝试了这两种方法,html()总是返回未定义的。在发布之前,我测试了这两种方法,并且假设
xml
变量包含字符串,这两种方法都适用于我。请参阅:如果通过ajax加载,我想我所展示的JS需要
数据类型:'text'
。如果使用
数据类型:'xml'
,则不需要
$.parseXML()
,因为jQuery将在将结果传递给成功处理程序之前自动执行此操作。您的示例有:未捕获的类型错误:无法调用IE中未定义的方法'replace'?我只在Chrome和FF中进行了测试。很抱歉
var doc = $($.parseXML(xml));
var content = $("<p>").append(doc.find("p").clone()).html();
/* 
 * THIS COMES WITH ABSOLUTELY NO WARRANTY.
 * 
 * This JQuery plugin just provides an easy way to parse an XML document object 
 * into a case sensitive string.
 * Self closing is not detected, and will be stringifyed as an empty xml node.
 * 
 * Tested in the following browsers:
 * -Chrome (v 33.0.1750.154 m)
 * -IE9 (v 9.0.8112.16421)
 * -Firefox (v 28.0)
 * -Opera (v 12.16)
 * -Safari (v 5.1.7 (7534.57.2))
 * 
 * @author Germán Coines Laguna - german.coines@hotmail.com
 * 
 * @usage $.fn.xmlToString(xmlObj)
 * @param xmlObj - An XML document object
 * @returns The Xml stringifyed.
 * 
 * @version 1.0
 * @depends JQuery v.1.9.1
 */
(function($){

  $.fn.xmltostring = function(xml)
  {
    var xmlText = "";

    $(xml).children().each(function(i,node){
      stringifyNode(node);
    });

    function stringifyNode(nd)
    {
      //obtain analisys obj
      var az = analyzeNode(nd);

      xmlText += "<" + az.nm + " " + az.ats + ">";

      if(az.chd) $(nd).children().each(function(i, ch){
        stringifyNode(ch);
      });

      xmlText += "</" + az.nm + ">";
    }

    function analyzeNode(nodeObj)
    {
      var obj = {nm: "", ats:"", chd: false, txt: ""};

      //Name
      obj.nm = nodeObj.nodeName;
      //Attributes
      $(nodeObj.attributes).each(function(i, at){
        obj.ats += at.name + "=\"" + at.value + "\" ";
      });
      //Children
      obj.chd = $(nodeObj).children().length > 0;
      //Text
      obj.txt = $(nodeObj).text();      

      return obj;
    }

    return xmlText;
   };  

 }(jQuery));
<script type="text/javascript" >

  $(document).ready(function(){

    var xml = loadXMLDoc("yourPathToFile/yourFileName.xml");

    alert($.fn.iwebxmltostring(xml));

    //var test = $.parseXML($("#result").text());

    //alert($(test).children().prop('nodeName'));

  });      

</script>