1

これは少し奇妙です。このスクリプトを別のコンピューターで実行したところ、別の結果が得られました。あるコンピューターではこのコードは機能しましたが、別のコンピューターでは機能しませんでした。ここに私のjsコードがあります:

xmlDoc = loadXmlDoc();
printSubClassOf();

function loadXmlDoc(){
    var xmlDom = null;
    var xhttp = new XMLHttpRequest();

    xhttp.open("GET", "resto.owl", false);
    xhttp.send(null);
    xmlDom = xhttp.responseXML;
    return xmlDom;
}

function printSubClassOf(){
    a = xmlDoc.getElementsByTagName("SubClassOf");  

    for(i = 0; i < a.length; i++){
        b = xmlDoc.getElementsByTagName("SubClassOf")[i].childNodes;

        for(j = 0; j < b.length; j++){          
            c = xmlDoc.getElementsByTagName("SubClassOf")[i].childNodes[j];

            document.write(i + " " + j + " " + c.nodeName + "<br>");
        }
    }
}

これが解析しようとした XML です。

<Ontology>
    <SubClassOf>
        <Class IRI="#Chef"/>
        <Class IRI="#Employee"/>
    </SubClassOf>
    <SubClassOf>
        <Class IRI="#Customer"/>
        <Class IRI="#People"/>
    </SubClassOf>
</Ontology>

Chrome Developer Tools を使用して、何が起こっているのかを確認しました。ステータス コード 200 の XHR リクエストがありましたが、それでもこのエラーが発生しました。

a = xmlDoc.getElementsByTagName("SubClassOf");
Uncaught TypeError: Cannot call method 'getElementsByTagName' of null

XMLを返すprintSubClassOf()前に終了したと思います。loadXmlDoc()どう思いますか?そして、この問題を解決するにはどうすればよいですか?参考までに、これを localhost で実行しました。

4

1 に答える 1

2

xml が無効です。有効な xml であるには、単一のルート ノードが必要です。responseXML は、応答が有効な xml である場合にのみ入力されます。

于 2013-04-01T21:26:31.597 に答える