2012-09-17 3 views
1

에 의해 XML에서 속성 값을 받기 것은 내가 할 속성을 가지고있는 곳에서 내 XML은 값 :다음 확인 조건

여기
<R a="1" b="2"> 
<I attribute1="" attribute2="some text"/> 
<I attribute1="" attribute2="some text"/> 
<I attribute1="0" attribute2="some text"/> 
<I attribute1="0" attribute2="some text"/> 
</R> 

내가 attribute1 null가 아닌 경우, 그때의 값을 얻을했습니다 확인했습니다 attribute2I tag.How this에서 어떻게합니까 ??? 도와주세요 ...

+0

:처럼 전체 코드는 모양 D – Andreas

+0

그러나 바로 문제 shouldn't ??? – user1495475

+1

아니, 그냥 읽고 끔찍한 이해 ^^ – Andreas

답변

5

UPDATE :

가 여기에 트릭을 할해야 전체 X-브라우저 작업 스크립트입니다. 다시 getAttribute('attribute1')을 인수로 대체하거나 DOM을 반환하고 나머지 부분을 처리하십시오. 이 코드는 약간 복잡해 보일 수도 있지만 (가능한 한 가벼운 클로저를 사용합니다), 매우 튼튼하고 안전하게 사용해야합니다 ... parseXML이라는 다른 함수를 선언하지 않고이 함수를 호출하지 않는 한 parseXML을 선언하기 전에 당신은 parse the XML을 할 수

var parseXML = (function(w,undefined) 
{ 
    'use strict'; 
    var parser,i,ie,parsed; 
    ie = false; 
    switch (true) 
    { 
     case w.DOMParser !== undefined: 
      parser = new w.DOMParser(); 
     break; 
     case new w.ActiveXObject("Microsoft.XMLDOM") !== undefined: 
      parser = new w.ActiveXObject("Microsoft.XMLDOM"); 
      parser.async = false; 
      ie = true; 
     break; 
     default : 
      throw new Error('No parser found'); 
    } 
    return function(xmlString,getTags) 
    { 
     var tags,keep = []; 
     if (ie === true) 
     { 
      parser.loadXML(xmlString); 
      parsed = parser; 
     } 
     else 
     { 
      parsed = parser.parseFromString(xmlString,'text/xml'); 
     } 
     tags = parsed.getElementsByTagName(getTags); 
     for(i=0;i<tags.length;i++) 
     { 
      if (tags[i].getAttribute('attribute1') && tags[i].getAttribute('attribute2')) 
      { 
       keep.push(tags[i].getAttribute('attribute2')); 
      } 
     } 
     //optional: 
     keep.push(parsed);//last element of array is the full DOM 
     return keep; 
    } 
})(this); 
var parseResult = parseXML('<r><i attribute1="" attribute2="Ignore This"/><i attribute1="foo" attribute2="got this"/></r>','i'); 
alert(parseResult[0] || 'nothing');//alerts 'got this' in IE and others 

:

var parser = new DOMParser(); 
var parsed = parser.parseFromString('<r a="1" b="2"><i v="" x="some text"/><i v="0" x="some important text"/></r>','text/xml'); 
var iTag = parsed.getElementsByTagName('i'); 
for (var i=0;i<iTag.length;i++) 
{ 
    if (iTag[i].getAttribute('v')) 
    { 
     console.log(iTag[i].getAttribute('x'));//do whatever 
    } 
} 

이 조각은 some important text, 그리고 some text를 기록합니다. 그게 전부입니다. 당신이 x 값을 저장하거나 반환해야 할 경우 또 다른 변수를 선언 : 그것은 항상 사건이 아니라면 이것은, x 속성이 설정됩니다 가정한다

var keep = [];//an array 
//change console.log line by: 
keep.push(iTag[i].getAttribute('x')); 

, 추가 검사는 쉽게 그 문제를 해결할 수 있습니다. 노드 이름이 끔찍한 것을

function parseXML(xml) 
{ 
    'use strict'; 
    var parser,keep,parsed,i,iTag; 
    parser = new DOMParser(); 
    keep = []; 
    parsed = parser.parseFromString(xml,'text/xml');//xml is the string 
    iTag = parsed.getElementsByTagName('i'); 
    for (i=0;i<iTag.length;i++) 
    { 
     if (iTag[i].getAttribute('v') && iTag[i].getAttribute('x')) 
     { 
      keep.push(iTag[i].getAttribute('x')); 
     } 
    } 
    return keep;//return array 
} 
+0

반 : 답장과 답변을 보내 주셔서 감사합니다. 저는 이것을 확인하고 알려 드리겠습니다. '엄격한 사용'이란 무엇을 의미합니까? 이리?? – user1495475

+0

@ user1495475 : 환영합니다. chrome에서 확인했지만 코드가 (이전) IE 버전에서 실행되어야하는지 확인해야합니다. 또한 : getAttribute ('v')'를 대체하고 정확한 이름을 넣거나 매개 변수로 바꾸는 것을 잊지 마십시오 ... –

+0

van : 저는 케이스를 시험해 보았습니다. 'Domparser is undefined'와 같은 오류가 발생했습니다. . 내가 Google에서 확인해 봤는데, 오래된 IE는'이 문제가있어. 제발 다른 방법으로 제게 제안 해 줘 ?? – user1495475