Firefox の XML 処理を IE のノード処理方式と互換性を持たせます。具体的なコードを以下に示します。
具体的なコードは以下の通りです。
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 移行版//EN" >
<HTML>
<頭>
< TITLE > Firefox の XML 処理を IE の selectSingleNode selectNodes メソッドと互換性のあるものにする </ TITLE >
< META NAME ="作者" CONTENT ="emu" >
< META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="説明" CONTENT ="selectSingleNode selectNodes メソッドをサポートするために Firefox を有効にする" >
< スクリプト言語 ="javascript" >
<!--
var isIE =
関数parseXML(st){
if (isIE){
var result = new ActiveXObject( "microsoft.XMLDOM" );
result.loadXML(st);
} それ以外 {
var parser = 新しい DOMParser();
var result = parser.parseFromString(st, " text/xml " );
}
結果を返します。
}
if ( ! isIE){
変数例;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
試す {
return new XMLSerializer().serializeToString(this);
} キャッチ (例){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
d.innerHTML を返します。
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
試す {
return new XMLSerializer().serializeToString(this);
} キャッチ (例){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
d.innerHTML を返します。
}
});
XMLDocument.prototype.__proto__.__defineGetter__( " text " , function (){
この .firstChild.textContent を返します
});
Element.prototype.__proto__.__defineGetter__( " text " , function (){
この .textContent を返します
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = 関数 (XPath){
var x = this .selectNodes(xpath)
if (! x x.length < 1 ) は null を返します。
x[0]を返します;
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){
var xpe = 新しい XPathEvaluator();
var nsResolver = xpe.createNSResolver( this .ownerDocument == null ?
this .documentElement : this .ownerDocument.documentElement);
var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
見つかった変数 = [];
変数レス;
while (res = result.iterateNext())
見つかった.push(res);
見つかったものを返します。
}
}
var x = parseXML( " <people> <person first-name= " eric " middle-initial= " H " last-name= " jung " > <address street= " 321South st " city= " denver " state= " co " country= " usa " /> <address street= " 123 main st " city= " arlington " state= " ma " country= " usa " /> </person> <person first-name= " jed " last-name= " Brown " > <address street= " 321 North st " city= " atlanta " state= " ga " country= " usa " /> <address street= " 123 West st " city= "seattle " state= " wa " country= " usa " /> <address street= " 321 SOUTH avenue " city= " denver " state= " co " country= " usa " /> </person></people> " );
alert( " すべて検索人の姓 (姓) " )
var results = x.selectNodes( " //person/@last-name " );
for ( var i = 0 ; i < results.length;i ++ )
alert( " 人 # " + i + " の姓は " + results[i].nodeValue);
alert( "2人目を検索" );
// IE は添え字のベースとして 1 ではなく 0 を使用します
if ( ! document.all)
results = x.selectSingleNode( " /people/person[2] " );
それ以外
results = x.selectSingleNode( " /people/person[1] " );
アラート(results.xml)
アラート( "住所がドンバー ストリートにある人を取得します" );
results = x.selectNodes( " //person[address/@city='denver'] " );
for ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// 通り名に南が含まれるすべての住所を取得します
results = x.selectNodes( " //address[contains(@street, 'south')] " );
アラート(結果[ 0 ].xml);
} それ以外 {
alert( "IE は //address[contains(@street, 'south')] クエリ メソッドをサポートしていません" )
}
// -->
</ スクリプト >
</HEAD>
<本体>
</BODY>
</ HTML >
例はhttp://kb.mozillazine.org/XPathから引用しました。この例からわかるように、IE の xpath サポートはまだ制限されています。