Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 是否存在获取XML节点的平面字符串表示的默认机制?_Javascript_Xml_Dom - Fatal编程技术网

Javascript 是否存在获取XML节点的平面字符串表示的默认机制?

Javascript 是否存在获取XML节点的平面字符串表示的默认机制?,javascript,xml,dom,Javascript,Xml,Dom,我不想对以下内容使用jQuery: 如果我有以下XML <parent> <a >some text <b propA="foo">some more text </b> and more text still </a> </parent> 一些文本 更多的文字 还有更多的文字 我想打个电话 //伪。。。我传入节点1,因为节点0是无用的空文本节点 getFla

我不想对以下内容使用jQuery:

如果我有以下XML

<parent>
    <a >some text
      <b propA="foo">some more text

      </b>
      and more text still
    </a>
   </parent>

一些文本
更多的文字
还有更多的文字
我想打个电话

//伪。。。我传入节点1,因为节点0是无用的空文本节点

getFlatXMLAsString(父.childNodes[1])

并接收一个字符串,该字符串看起来像“一些文本\n一些更多文本\n\n更多文本”

请注意,它只是将XML转换为一个平面字符串,但包含节点自己的开始和结束标记(如果有属性,那么其中也会有属性)


显然,我可以手动完成这项工作,但希望有某种内置机制可以阻止我重新发明轮子。

在Mozilla和Webkit浏览器中,您可以使用。只需做一个对象测试

我不知道其他浏览器中有哪些功能,但它们可能有一个


最坏的情况是,您必须手动编写一个函数来完成此操作,该函数遍历所有节点并写入字符串。在Mozilla和Webkit浏览器中,您可以使用。只需做一个对象测试

我不知道其他浏览器中有哪些功能,但它们可能有一个


最坏的情况是,您必须手动编写一个函数来完成此操作,该函数遍历所有节点并写入字符串。应该可以开始了。

根据发布的答案,跨浏览器的方法看起来像

function outerHTML(node){
    // if IE, Chrome take the internal method otherwise build one
  return node.outerHTML || (
  function(n){
      var div = document.createElement('div'), h;
      div.appendChild( n.cloneNode(true) );
      h = div.innerHTML;
      div = null;
      return h;
  })(node);
  }

如果我正确理解了这个问题。

根据发布的答案,跨浏览器的方法看起来是这样的

function outerHTML(node){
    // if IE, Chrome take the internal method otherwise build one
  return node.outerHTML || (
  function(n){
      var div = document.createElement('div'), h;
      div.appendChild( n.cloneNode(true) );
      h = div.innerHTML;
      div = null;
      return h;
  })(node);
  }

如果我正确理解了这个问题,请回答。

@Dr.Dredel您只想删除换行符并将其替换为
\n
?或者还有什么需要做的吗不不不。。。我想要完整的字符串化表示(包括它的所有属性)。。。nodeValue在遇到另一个子元素节点时立即停止。。。我希望它把它当作一个文档节点,只给我整个shebang(但只从我传入的节点开始)。。因此,在我的示例中,我传入并获取所有的孩子。@Dr.Dredel您只想删除换行符并将其替换为
\n
?或者还有什么需要做的吗不不不。。。我想要完整的字符串化表示(包括它的所有属性)。。。nodeValue在遇到另一个子元素节点时立即停止。。。我希望它把它当作一个文档节点,只给我整个shebang(但只从我传入的节点开始)。。所以,在我的例子中,我通过并得到了所有的孩子。我不认为这符合我的要求。请注意,我希望得到XML的扁平版本,它是我传入的节点的子节点,包括所有括号和属性以及所有内容。我不想去掉内部节点,我想得到它们的扁平字符串表示。在我的问题中,我提供了一个示例,说明在给定传入节点的情况下,我希望从函数中得到什么?不幸的是,这将取决于您所处的环境。你是在浏览器中执行这个JS吗?我是。正如你想象的,它必须是跨浏览器的。我开始怀疑我应该自己滚。。。这是一个非常简单的递归方法,事实上,我在几年前就已经写过了。此外,由于IE将XML视为DOM,因此我可能只需要在父节点上调用innerHMTL即可获得所需的内容。但我认为这在任何非垃圾浏览器中都不起作用:)不幸的是,没有通用的跨浏览器方法来做到这一点。我改变了我的答案,让你知道外面发生了什么。我认为从DOM进行序列化在原则上很容易(递归循环),但在实践中很棘手(实体、内联DTD、奇数角情况)。我认为这并不能满足我的要求。请注意,我希望得到XML的扁平版本,它是我传入的节点的子节点,包括所有括号和属性以及所有内容。我不想去掉内部节点,我想得到它们的扁平字符串表示。在我的问题中,我提供了一个示例,说明在给定传入节点的情况下,我希望从函数中得到什么?不幸的是,这将取决于您所处的环境。你是在浏览器中执行这个JS吗?我是。正如你想象的,它必须是跨浏览器的。我开始怀疑我应该自己滚。。。这是一个非常简单的递归方法,事实上,我在几年前就已经写过了。此外,由于IE将XML视为DOM,因此我可能只需要在父节点上调用innerHMTL即可获得所需的内容。但我认为这在任何非垃圾浏览器中都不起作用:)不幸的是,没有通用的跨浏览器方法来做到这一点。我改变了我的答案,让你知道外面发生了什么。我认为从DOM进行序列化在原则上很容易(递归循环),但在实践中很棘手(实体、内联DTD、奇数角情况)。