首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XPath出错。节点不能在创建它的文档以外的文档中使用。

XPath出错。节点不能在创建它的文档以外的文档中使用。
EN

Stack Overflow用户
提问于 2013-10-16 11:19:42
回答 2查看 2.3K关注 0票数 6

我试图用XPath解析一个xml文档。

这个脚本在chrome上运行得很好,但是给出了以下错误:

WrongDocumentError:不能在创建节点的文档中使用节点

有关守则如下:

代码语言:javascript
运行
复制
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.

我想知道是什么问题,这是我的console.logs的结果:

console.log(xmlText):

代码语言:javascript
运行
复制
<?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>

console.log($xml):

代码语言:javascript
运行
复制
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相关的,而且没有多大帮助。

EN

回答 2

Stack Overflow用户

发布于 2013-10-16 14:26:35

而不是这样:

代码语言:javascript
运行
复制
var paragraphCount = document.evaluate(path, $xml, null,
                         XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );

你应该使用:

代码语言:javascript
运行
复制
var paragraphCount = $xml.evaluate(path, $xml, null, 
                         XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
票数 6
EN

Stack Overflow用户

发布于 2018-10-26 19:31:36

越容易越好,

而不是

代码语言:javascript
运行
复制
var paragraphCount = document.evaluate(path, $xml, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); 

使用ownerDocument

代码语言:javascript
运行
复制
var paragraphCount =  $xml.ownerDocument.evaluate(path, $xml, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19402034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档