Firefox의 XML 처리가 IE의 노드 처리 방법과 호환되도록 만듭니다. 구체적인 코드는 아래와 같습니다.
구체적인 코드는 다음과 같습니다.
<! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<헤드>
< TITLE > Firefox의 xml 처리가 IE의 selectSingleNode selectNodes 메소드와 호환되도록 만들기 </ TITLE >
< META NAME ="저자" CONTENT ="emu" >
< META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="Description" CONTENT ="selectSingleNode selectNodes 메소드를 지원하려면 Firefox를 활성화하십시오." >
< 스크립트 언어 = "자바스크립트" >
<!--
var isIE = !! document.all;
함수 구문 분석(st){
만약 (isIE){
var result = new ActiveXObject( " microsoft.XMLDOM " );
결과.loadXML(st);
} 또 다른 {
var 파서 = 새로운 DOMParser();
var result = parser.parseFromString(st, " text/xml " );
}
결과 반환;
}
if ( ! isIE){
var ex;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , 함수 (){
노력하다 {
return new XMLSerializer().serializeToString( this );
} 잡기 (예){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
d.innerHTML을 반환합니다.
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , 함수 (){
노력하다 {
return new XMLSerializer().serializeToString( this );
} 잡기 (예){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
d.innerHTML을 반환합니다.
}
});
XMLDocument.prototype.__proto__.__defineGetter__( " text " , 함수 (){
이 .firstChild.textContent를 반환하세요.
});
Element.prototype.__proto__.__defineGetter__( " text " , 함수 (){
이 .textContent를 반환하세요.
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = 함수(XPath){
var x = 이 .selectNodes(xpath)
if(!x x.length < 1) 반환 null ;
x[0]을 반환;
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = 함수(xpath){
var xpe = new XPathEvaluator();
var nsResolver = xpe.createNSResolver( this .ownerDocument == null ?
this .documentElement : this .ownerDocument.documentElement);
var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
var 발견 = [];
var res;
동안(res = result.iterateNext())
발견.푸시(res);
반품을 찾았습니다.
}
}
var x =parseXML( " <people> <사람 이름= " eric " middle-initial= " H " 성= " jung " > <주소 거리= " 321 south st " city= " denver " state= " co " country= " usa " /> <주소 거리= " 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 " 국가= " usa " /> <주소 거리= " 123 west st " city= " 시애틀 " state= " wa " 국가= " usa " /> <address street= " 321 south avenue " city= " denver " state= " co " country= " usa " /> </person></people> " );
Alert( " 모두 검색 사람의 성 (성) " )
var results = x.selectNodes( " //사람/@성 " );
for ( var i = 0 ; i < results.length;i ++ )
Alert( " Person # " + i + "의 성이 " + results[i].nodeValue);
Alert( "두 번째 사람을 검색하세요" );
// IE는 첨자 기반으로 1이 아닌 0을 사용합니다.
if ( ! document.all)
results = x.selectSingleNode( " /people/person[2] " );
또 다른
results = x.selectSingleNode( " /people/person[1] " );
Alert(results.xml)
Alert( "주소가 donver street에 있는 사람을 가져옵니다." );
results = x.selectNodes( " //person[address/@city='denver'] " );
for ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// 거리 이름에 south가 포함된 모든 주소를 가져옵니다.
results = x.selectNodes( " //address[contains(@street, 'south')] " );
경고(결과[ 0 ].xml);
} 또 다른 {
경고( "IE는 //address[contains(@street, 'south')] 쿼리 방법을 지원하지 않습니다." )
}
// -->
</ 스크립트 >
</HEAD>
<본문>
</BODY>
</ HTML >
http://kb.mozillazine.org/XPath 에서 인용된 예입니다. 예제에서 볼 수 있듯이 IE의 xpath 지원은 여전히 제한적입니다.