2017-02-20 16 views
1

나는이 같은 사용자 XML 파일 (A sitemap.xml의 파일) 읽기 위해 노력하고있어 사용하여 XML 파일을 구문 분석 : 내가 읽을 수있는 XML은 구조화 된 콘텐츠를 구문 분석하는 방법읽기 및 HTML5 파일 API

<?xml version="1.0" encoding="UTF-8"?> 
<urlset 
     xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
      http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
<url> 
    <loc>http://www.myhost.com/</loc> 
    <lastmod>2016-09-08T13:50:33+00:00</lastmod> 
</url> 
</urlset> 

을/프로그래밍 방식?

DomParser (XmlDocument) 및 DOM 인터프리터 (HtmlElement)를 사용하여 두 가지 방법을 시도했습니다.

<input type="file" onchange="readfile(this)" > 

<script> 
    function readfile(fileinputobj){ 
     var reader = new FileReader(); 

     reader.onload = function(e) { 
      alert(reader.result); 

      //Using DOMParser to get XMLDocument 
      var parser = new DOMParser(), 
      xmlDoc = parser.parseFromString(reader.result, "text/xml"); 

      if (xmlDoc.documentElement){ 
       console.log(xmlDoc.documentElement); 
       //xmlDoc.documentElement.nodeName == 'urlset' 
      } 

      //Using DOM interpreter to get HtmlDocument 
      var doc=document.createElement("div"); 
      doc.innerHTML=reader.result; 
      if (doc.querySelector('urlset')){ 
       console.log(doc.querySelector('urlset')); 
       //doc.querySelector('urlset').tagName == 'urlset' 
      } 
    } 

    reader.readAsText(fileinputobj.files[0]); 
} 
</script> 

속성과 내용을 조회 할 XML 문서를이, 을하고 통과하는 가장 안전하고 크로스 브라우저 방법은 무엇입니까?

편집 : 추가 정보를 원하시면 검색 내가 https://www.w3schools.com/Xml/xml_parser.aspXML parsing of a variable string in JavaScript

에서 크로스 브라우저 호환성에 대한 해결책을 발견했습니다을 XmlDocument가 DomParser, 또는 ActiveXObject("Microsoft.XMLDOM")를 사용하여 거의 모든 잘 알려진 브라우저와 호환되는 것으로 보인다 IE6-IE8에서.

XML 검색의 경우 태그 선택에 xmlElem=xmldoc.getElementById(), 내부 노드를 가져 오는 xmlElem.childNodes, 팁 태그 속성을 읽는 xmlElem.getAttribute()을 사용했습니다. 괜찮아?

내가 XML 데이터를 파싱 객체를 얻기 위해 다음 코드를 사용하고 XML 데이터를 구문 분석의 가장 호환 및 크로스 브라우저 방법을 발견했습니다

답변

0

은 (XMLDOM와 두 번째 부분은 IE5-8 브라우저입니다) :

두 객체에 대한

var node=0; //example node index 
console.log(xmldata); 
console.log("Tag:"+xmlDoc.childNodes[node].tagName); 
console.log("Attribute: name="+xmlDoc.childNodes[node].getAttribute("name")); 
console.log(xmlDoc.childNodes[node]); 
console.log("Text Content:"+xmlDoc.childNodes[node].text); //only works with XMLDOM 
console.log("Text Content:"+xmlDoc.childNodes[node].textContent); //only works with DomParser 
console.log("Child nodes:"+xmlDoc.childNodes[node].childNodes.length); 
for(var i=0;i<xmlDoc.childNodes[node].childNodes.length;i++){ 
    console.log("Child node "+i+":"+xmlDoc.childNodes[node].childNodes[i].tagName); 
} 

이러한 특성은 같은 방식으로 작업 :

var xmldata="<data name=\"test\">txt1 <item>txt2</item></data>"; 

var xmlDoc; 
if (window.DOMParser ) { 
     // code for modern browsers 
     parser = new DOMParser(); 
     xmlDoc = parser.parseFromString(xmldata,"text/xml"); 
} else { 
     // code for old IE browsers 
     xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = false; 
     xmlDoc.loadXML(xmldata); 
} 
그럼 내가 XML 데이터의 관련 정보를 얻기 위해 다음과 같은 방법을 테스트했습니다. 만 .text.textContent는 오래된 IE 브라우저와의 호환성을 필요로하지 않는 한, DOMParser 현대 대부분의 브라우저를 위해 노력하고 있습니다 (는 .text는 DOMParser에 대한 정의되지 및 .textContent이 XMLDOM에 대해 정의되지 않는다)

다른 동작을합니다.