>  기사  >  웹 프론트엔드  >  js 구문 분석 xml 문자열 및 xml 문서 구현 원리 및 코드(ie 및 firefox용)_javascript 기술

js 구문 분석 xml 문자열 및 xml 문서 구현 원리 및 코드(ie 및 firefox용)_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:42:24943검색

IE와 Firefox에 대해 각각 XML 문서와 XML 문자열을 구문 분석했습니다. 일부 기능을 보려면 주석을 제거하면 됩니다.

Ajax 환경에서 xml을 구문 분석하는 경우 원칙은 실제로 동일합니다. 단, ajax에 배치된 경우 반환된 xml을 여전히 구문 분석해야 합니다.

코드 복사 코드는 다음과 같습니다.

>

<br><meta name="Author" content="lushuaiyin" head><body> <br>js를 사용하여 xml 문서 및 xml 문자열 분석<br></html> <br><script> XML 문서//////////////////////////////////////////////// //// ///// <br>var xmlDoc=null <br>//IE 브라우저 지원 <br>if(window.ActiveXObject){ <br>xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); <br> } <br>//Mozilla 브라우저 지원<br>else if(document.implementation && document.implementation.createDocument){ <br>xmlDoc = document.implementation.createDocument('','',null); 🎜> } <br>else{ <br>alert("here"); <br>} <br>if(xmlDoc!=null){ <br>xmlDoc.async = <br>xmlDoc.load(" house.xml"); <br>} <br>//IE와 Firefox는 파서가 다를 뿐만 아니라 파싱 프로세스도 다릅니다. 다음과 같습니다. <br>//즉 XML 문서 구문 분석<br>//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[0].childNodes[0].childNodes[0].nodeValue);/ / 150만개 팝업<br>//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[0].childNodes[1].childNodes[0].nodeValue);//침실 1개와 침실 3개 팝업 침실<br> //childNodes[1] <br>을 탐색하고 구문 분석합니다. <br>//alert(xmlDoc.childNodes[1].childNodes[1].childNodes[0].childNodes[0].nodeValue);//팝업 2 백만 <br> //alert(xmlDoc.childNodes[1].childNodes[0].childNodes[0].childNodes[0].nodeValue) //150만 팝업<br>//alert(xmlDoc.childNodes[ 1].childNodes[ 0].childNodes[1].childNodes[0].nodeValue);//방 1개와 침실 3개 팝업<br>//항목(i)을 사용하여 이동할 수도 있습니다<br>// var node=xmlDoc.documentElement.childNodes ; <br>//alert(nodes.item(0).childNodes.item(0).childNodes.item(0).text); //150만 개 팝업<br>/ /alert(nodes.item(0) .childNodes.item(1).childNodes.item(0).text); //방 1개와 침실 3개 팝업<br>//Firefox가 xml 문서를 구문 분석합니다<br>// Firefox 및 IE는 서로 다른 노드에 대해 xml을 구문 분석합니다. 값으로 textContent를 사용합니다. <br>//그리고 일부 계층적 하위 노드 앞뒤에 "n" 줄 바꿈을 추가합니다. (왜인지는 모르겠습니다. Firebug로 디버깅할 때 이렇게 나오므로 작성한 코드를 테스트해 보는 것이 가장 좋습니다. 다른 환경에서는 맞지 않습니다.) <br>//즉, 첫 번째 노드 는 "n"이고 첫 번째 노드는 "n"입니다. 2개의 노드가 실제 첫 번째 노드입니다. <br>//세 번째 노드는 "n"이고, 네 번째 노드는 실제 두 번째 노드입니다. <br>//layer별로 childNodes[0]를 가져오고 구문 분석합니다. <br>//alert(xmlDoc.childNodes[0].childNodes[1].childNodes[1].textContent);//150만 개 팝업<br>// Alert(xmlDoc.childNodes[0].childNodes[1].childNodes[3].textContent);//침실 3개 아파트 팝업<br>//노드 이름 확인 직접 가져오기 getElementsByTagName("address" ) <br>// Alert(xmlDoc.getElementsByTagName("address")[0].textContent);//침실 1개에 150만, 침실 3개에 200만, 300만 팝업 <br>//alert(xmlDoc. getElementsByTagName("address")[0].childNodes [1].textContent);//방 1개와 침실 3개에 대해 150만 개 팝업<br>//alert(xmlDoc.getElementsByTagName("address")[0].childNodes [1].childNodes[1].textContent);// 150만 개 팝업<br>//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[1].childNodes[3].textContent); //방 1개와 침실 3개 팝업<br>//alert(xmlDoc .getElementsByTagName("address")[0].childNodes[3].textContent);//200만개 팝업 <br>//Firefox도 가능 항목(1) 함수를 사용하여 탐색합니다. 일부 계층적 노드도 노드 "n" 앞뒤에 추가됩니다. <br>//첫 번째 노드는 item(1), 두 번째 노드는 item(3), 세 번째 노드는 item(5) <br>//item(1) 함수 순회 분석<br>/ /var node=xmlDoc.documentElement.childNodes; <br>//alert(nodes.item(1).textContent); //1베드룸, 3베드룸 팝업 <br>//alert(nodes.item(1) ).childNodes.item(1).textContent); //150만 개 팝업<br>//alert(nodes.item(1).childNodes.item(3).textContent) //1개의 침실과 3개의 침실<br>// XML 문자열 구문 분석 ////////////////////////////////////////// /////////////////////////////// <br>var str="<car>" "500,000가격>A6패턴>브랜드>" <br>"650,000A8 ;" <br>"<price>170,000</price>" <br>""; <br>//Cross-browse IE와 Firefox에서 xml을 구문 분석하는 데 사용하는 구문 분석기가 다릅니다.<br>var xmlStrDoc=null; <br>if (window.DOMParser){// Mozilla Explorer <br>parser=new DOMParser() <br>xmlStrDoc=parser.parseFromString(str,"text/xml"); <br>}else{// Internet Explorer <br>xmlStrDoc=new ActiveXObject("Microsoft.XMLDOM") <br>xmlStrDoc.async="false"; <br>xmlStrDoc.loadXML(str); <br>//즉 XML 문자열 구문 분석<br>//alert(xmlStrDoc.getElementsByTagName("car")[0].childNodes[0].childNodes[0].childNodes[0].nodeValue);//팝업 500,000<br>//alert(xmlStrDoc.getElementsByTagName("car")[0].childNodes[0].childNodes[1].childNodes[0].nodeValue);//A6 팝업 <br>//좋아 사용 <br>을 통과할 항목(i)//var strNodes=xmlStrDoc.documentElement.childNodes <br>//alert(strNodes.item(0).childNodes.item(0).childNodes.item(0).text ) ; //500,000개 팝업 <br>//alert(strNodes.item(0).childNodes.item(1).childNodes.item(0).text) //A6 팝업 <br>//Firefox는 xml을 구문 분석합니다. String <br>//Firefox와 IE는 textContent를 사용하여 xml의 다양한 노드 값을 구문 분석합니다. <br>//그리고 일부 계층적 하위 노드 앞뒤에 "n" 줄 바꿈을 추가합니다. <br>//즉, 첫 번째 노드가 "n"이고, 두 번째 노드가 실제 첫 번째 노드입니다. <br>//세 번째 노드는 "n"이고, 네 번째 노드는 실제 두 번째 노드입니다. <br>//alert(xmlStrDoc.childNodes[0].childNodes[1].textContent);//650,000 A8 팝업 <br>//alert(xmlStrDoc.childNodes[0].childNodes[1].childNodes[1 ].textContent);//A8 <br>//alert(xmlStrDoc.childNodes[0].childNodes[1].childNodes[0].textContent);//팝업 650,000<br>//Firefox에서도 항목을 사용할 수 있습니다. (1) 함수 순회, 일부 계층 노드 앞뒤에 노드 "n"이 추가된다는 점에 유의하세요. <br>//첫 번째 노드는 item(1), 두 번째 노드는 item(3), 세 번째 노드는 item(5)입니다. <br>//var node=xmlStrDoc.documentElement.childNodes <br>/ /alert(nodes.item(1).textContent); //650,000 A8 팝업 <br>//alert(nodes.item(1).childNodes.item(0).textContent); //650,000 A8 팝업 <br> 🎜>//alert(nodes.item(1).childNodes.item(1).textContent); //A8 팝업 <br></script> <br><br>
여기서 xml은 각각에 대한 것입니다. 노드 레벨은 가장 짜증나는 문제입니다. 올바른 것이 나오는 한 계속해서 시도할 수 있습니다.
노드의 계층 관계를 쉽게 확인하거나 디버깅할 수 있습니다.


이런 점에서는 json을 읽고 이해하는 것이 더 낫다고 생각합니다. 파싱이 너무 힘드네요
코드 복사 코드는 다음과 같습니다.
< ;?xml version="1.0" 인코딩="utf-8" ?>


150만 ;
침실 1개와 침실 3개

;


230만
도시> ="난징">
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.