XPath 出错.节点不能在创建节点的文档以外的文档中使用
Error with XPath. Node cannot be used in a document other than the one in which it was created
我正在尝试使用XPath解析xml文档。
该脚本在 chrome 上运行良好,但给了我以下错误:
错误文档错误:节点不能在文档以外的文档中使用 创建它的一个
有问题的代码如下:
function StringToXML(oString) {
//code for IE
if (window.ActiveXObject) {
var oXML = new ActiveXObject("Microsoft.XMLDOM"); oXML.loadXML(oString);
return oXML;
}
// code for Chrome, Safari, Firefox, Opera, etc.
else {
return (new DOMParser()).parseFromString(oString, "text/xml");
}
}
function parseGpx(xmlText){
var pointArray = new Array();
var $xml = StringToXML(xmlText);
var path = "//*[local-name()='trkpt']";
var paragraphCount = document.evaluate(path, $xml, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
//this last line is what is causing the problems.
我想知道可能是什么问题,这是我的控制台.logs的结果:
console.log(xmlText):
<?xml version="1.0" encoding="iso-8859-1"?>
<gpx version="1.0" creator="http://www.bikecityguide.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<name></name>
<desc></desc>
<time>2013-10-10T17:54:09Z</time>
<bounds minlat="47.068677710511" minlon="15.423460100401" maxlat="47.074318908518" maxlon="15.431141947021"/>
<trk>
<trkseg>
<trkpt lon= "15.429682825318" lat="47.074318908518" />
<trkpt lon= "15.428824518436" lat="47.071922203043" />
<trkpt lon= "15.424404237975" lat="47.071366853467" />
<trkpt lon= "15.423460100401" lat="47.068677710511" />
<trkpt lon= "15.427107904664" lat="47.068970015231" />
<trkpt lon= "15.428781603085" lat="47.070957644813" />
<trkpt lon= "15.430755708927" lat="47.071016103385" />
<trkpt lon= "15.430326555481" lat="47.072068346707" />
<trkpt lon= "15.431141947021" lat="47.072068346707" />
<trkpt lon= "15.430884454953" lat="47.074114315917" />
</trkseg>
</trk>
<wpt lon="15.429682825318" lat="47.074318908518"></wpt>
<wpt lon="15.428824518436" lat="47.071922203043"></wpt>
<wpt lon="15.424404237975" lat="47.071366853467"></wpt>
<wpt lon="15.423460100401" lat="47.068677710511"></wpt>
<wpt lon="15.427107904664" lat="47.068970015231"></wpt>
<wpt lon="15.428781603085" lat="47.070957644813"></wpt>
<wpt lon="15.430755708927" lat="47.071016103385"></wpt>
<wpt lon="15.430326555481" lat="47.072068346707"></wpt>
<wpt lon="15.431141947021" lat="47.072068346707"></wpt>
<wpt lon="15.430884454953" lat="47.074114315917"></wpt>
</gpx>
控制台.log($xml):
URL
"http://localhost/trackeditor/"
activeElement
gpx
async
true
baseURI
"http://localhost/trackeditor/"
characterSet
"UTF-8"
childNodes
NodeList[gpx]
compatMode
"CSS1Compat"
contentType
"text/xml"
currentScript
null
defaultView
null
dir
""
doctype
null
documentElement
gpx
documentURI
"http://localhost/trackeditor/"
firstChild
gpx
hidden
true
implementation
DOMImplementation { hasFeature=hasFeature(), createDocumentType=createDocumentType(), createDocument=createDocument(), more...}
inputEncoding
"UTF-8"
lastChild
gpx
lastModified
"10/16/2013 13:15:31"
lastStyleSheetSet
null
localName
null
location
null
mozFullScreen
false
mozFullScreenElement
null
mozFullScreenEnabled
false
mozHidden
true
mozPointerLockElement
null
mozVisibilityState
"hidden"
namespaceURI
null
nextSibling
null
nodeName
"#document"
nodeType
9
nodeValue
null
ownerDocument
null
parentElement
null
parentNode
null
preferredStyleSheetSet
""
prefix
null
previousSibling
null
readyState
"complete"
referrer
""
selectedStyleSheetSet
""
styleSheetSets
Object { length=0, item=item(), contains=contains()}
styleSheets
Object { length=0, item=item()}
textContent
null
title
""
visibilityState
"hidden"
__proto__
XMLDocumentPrototype { ELEMENT_NODE=1, ATTRIBUTE_NODE=2, TEXT_NODE=3, more...}
我想知道为什么会发生这种情况,几乎所有谷歌搜索这个问题的结果都是与 TinyMCE 相关的,不是很有帮助。
取而代之的是:
var paragraphCount = document.evaluate(path, $xml, null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
您应该使用:
var paragraphCount = $xml.evaluate(path, $xml, null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
更简单的跨浏览器方式,
而不是
var paragraphCount = document.evaluate(path, $xml, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
使用所有者文档
var paragraphCount = $xml.ownerDocument.evaluate(path, $xml, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
相关文章:
- 如何判断何时将dom节点添加到文档中
- 什么时候是“;“安全”;以在解析文档时修改给定的html元素/节点
- Foundation 5可能的错误:未捕获类型错误:层必须是文档节点Foundation.min.js:8
- 如何使用vanillaJS将mp4视频插入到具有特定维度的html文档中,播放2秒,然后删除节点
- 追加到文档中尚未插入的新节点
- 这是什么'...${...}节点文档中的代码意味着
- HTTP 获取节点 JS 以使用文档元素进行解析
- 如何获取文档片段中的所有文本节点
- 是否可以检测IE何时忽略xml文档中的空白文本节点
- 确定元素是否由 JS 添加,还是原始 HTML 文档 *OR* 检测脚本何时通过 InnerHTML 更新节点
- XPath 出错.节点不能在创建节点的文档以外的文档中使用
- 尝试从 dom 文档中删除 dom 节点时出错
- JSNI (GWT-GWTP):jQuery在就绪事件触发后不会在“文档就绪”函数中选择节点
- XML解析器/从XML节点列表创建一个XML DOM文档
- 节点.js和约翰尼-五“文档未定义”错误
- Mongodb 节点.js获取插入文档的计数
- 可以't使用getElementsByTagName从Javascript中的XML文档中检索节点
- 如何将html文档解析为包含每个节点行号的AST
- 节点js mongodb模块嵌入文档
- 什么是最好的方法来计算字符数在html dom节点(在文档节点使用javascript范围库)