Синтаксический анализ jQuery XML IE7 / IE8 - PullRequest
5 голосов
/ 30 марта 2011

Я пытаюсь получить доступ к содержимому XML, прикрепленному к концу документа HTML (сгенерированный материал) с помощью jquery, используя этот метод:

$("SELECTION_STATE").find("CHARACTERISTIC").each( function() {
     if($(this).attr("name") == "Z_MDST" ) {
         alert($(this).find("MEMBER").attr("name"));
     }
 });

это нормально работает в Firefox и Chrome, но не в IE, ничего не предупреждает.

это xml, который я пытаюсь пройти

<SELECTION_STATE>

    <SELECTION type="CARTESIAN_PRODUCT">
      <CHARACTERISTICS>
        <CHARACTERISTIC name="Z_MDST">
          <SELECTIONS>
            <SELECTION type="SINGLE_MEMBER">
              <MEMBER name="00002213" type="MEMBER" text="2213"/>
            </SELECTION>
          </SELECTIONS>
        </CHARACTERISTIC>

Есть ли способ, которым я могу достичь этого с помощью jquery 1.5?

Заранее спасибо

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Поскольку вы уже используете jQuery, используйте функцию parseXML (http://api.jquery.com/jQuery.parseXML/ добавлено в версии 1.5)

var xmlDoc = $.parseXML(data);

$(xmlDoc).find("CHARACTERISTIC").each( function() {
    if($(this).attr("name") == "Z_MDST" ) {
        alert($(this).find("MEMBER").attr("name"));
    }
});
6 голосов
/ 30 марта 2011

Потому что вы находитесь в документе HTML. IE не распознает XML.

console.log($("SELECTION_STATE").get());

возвращает объект HTMLUnknownElement в IE

Чтобы использовать XML, вам нужно запустить его через анализатор IE XML. Нечто подобное.

var x = new ActiveXObject("Microsoft.XMLDOM");
x.loadXML(yourXML) 

Очевидно, вы захотите сделать это только , если ($. Browser.msie)

Дополнительный вопрос: загружаете ли вы XML с помощью AJAX?

Обновлено: полный пример

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
var myXML = document.body.innerHTML;  // or wherever you are storing the XML in the DOM
xmlDoc.loadXML(myXML)

if (xmlDoc.parseError.errorCode != 0) {
   var myErr = xmlDoc.parseError;
   console.log("You have error " + myErr.reason);
} else {
   console.log(xmlDoc.xml);
}

$("SELECTION_STATE", xmlDoc).find("CHARACTERISTIC").each( function() {
     if($(this).attr("name") == "Z_MDST" ) {
         alert($(this).find("MEMBER").attr("name"));
     }
});
...