0

XMLDoc オブジェクトを設定しようとしている js 関数があり、グローバル パラメータ (modelingDiagram) の 1 つも設定しています。

タグ名で要素を取得しようとすると、常に空のリストが返されます (ただし、Firefox では返されません)。デバッグ中に、監視領域で試したタグに対して空のリストが返されていることがわかりました-xmlDoc.getElementsByTagName('Processes'); または xmlDoc.getElementsByTagName("desc");

以下はjs関数です。コメント領域は、例外が発生した場所を示しています。

function setXmlDoc(text)
{
if (window.ActiveXObject){
              var doc=new ActiveXObject('Microsoft.XMLDOM');
              doc.async='false';
              doc.loadXML(text);
} else {
              var parser=new DOMParser();
              var doc=parser.parseFromString(text,'text/xml');
}

xmlDoc = doc;
modelingDiagram = xmlDoc.getElementsByTagName('Processes')[0].getElementsByTagName('ModelingDiagram');
//Uncaught TypeError: Cannot call method 'getElementsByTagName' of undefined
}

テキスト変数には、文字列形式の xml が含まれています。

<?xml version="1.0" encoding="utf-8"?>
<Processes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="">
  <Process>
    <desc value="Z45 Accounting">Z45 Accounting</desc>
    <height value="541">541</height>
    <width value="411">411</width>
    <xval value="50">50</xval>
    <yval value="50">50</yval>
    <Flowelements>
   ....
   ....
   ....

Chromeが適切なリストを取得するためにここで何を期待しているのかわかりませんでしたか?

4

2 に答える 2

0

問題を深く掘り下げた後、この xml 文字列には 0 番目のインデックス (見えない) に特別な文字が含まれていることがわかりました。alert(text.charAt(0)) の実行時に「<」を期待していましたが、ポップアップに文字が表示されませんでした。これにより、stmt xmlDoc.loadXML(text) が常に false を返すことに気付きました。

text = text.substr(1, text.length);

この問題を解決しました。

于 2012-12-05T14:48:17.327 に答える
0

W3C DOM 3 コア仕様に従って getElementByTagName() は NodeList を返し、「html」仕様とは独立した「コア」仕様を持ちます。Gecko/Firefox は現在 NodeList を返します (バグ 162927) が、Gecko/Firefox 19 以降では、それが返されます。 HTMLCollection (バグ 799464)。

しかし、DOM4 ドラフトでは、getElementByTagName() は HTMLCollection を返す必要があると述べています。

現在、Internet Explorer、WebKit、Opera は HTMLCollection を返します。namedItem メソッドを使用してみてください。これにより、HTMLCollection に似たものになります。

于 2012-12-05T06:37:44.997 に答える