Парсинг XML переменной строки в JavaScript

Решение

Похоже, у меня отладчик возился с сокетом ...

Ниже приведены две ссылки с изображениями, показывающими правильный и неправильный регистр:

НЕПРАВИЛЬНО -> Мне заданы настройки Chrome и без отладчика сценариев

[ 111] ПРАВИЛЬНО -> Подобные настройки позволили устранить ошибку, и все браузеры были способны общаться друг с другом

Я надеюсь, что это может помочь другим с той же проблемой!

С уважением [ 118]

200
задан Peter Mortensen 16 June 2012 в 23:23
поделиться

4 ответа

Обновление: Поскольку более корректный ответ видит ответ Tim Down .

Internet Explorer и, например, основанные на Mozilla браузеры представляет различные объекты для парсинга XML, таким образом, мудро использовать платформу JavaScript как jQuery для обработки различий перекрестных браузеров.

А действительно основной пример:

var xml = "<music><album>Beethoven</album></music>";

var result = $(xml).find("album").text();

Примечание: Как указано в комментариях; jQuery действительно не делает никакого XML, анализирующего безотносительно, он полагается на метод DOM innerHTML и проанализирует его как он, был бы любой HTML так быть осторожным при использовании имен элементов HTML в XML. Но я думаю, что это работает довольно хорошее для простого XML 'парсинг', но, вероятно, не предлагается для интенсивного или 'динамического' парсинга XML, где Вы не делаете заранее, какой XML снизится, и это тестирует, если все анализирует как ожидалось.

90
ответ дан Cody Gray 23 November 2019 в 05:05
поделиться

Большинство примеров в сети (и некоторые представленные выше) показывает, как загрузить XML из файла в браузере совместимый способ. Это оказывается легким, кроме случая Google Chrome, который не поддерживает document.implementation.createDocument() метод. При использовании Chrome, для загрузки XML-файла в объект XMLDocument, необходимо использовать встроенный объект XmlHttp и затем загрузить файл путем передачи, это - URI.

В Вашем случае, сценарий отличается, потому что Вы хотите загрузить XML из строковой переменной , не URL. Для этого требования однако, предположительно, работает Chrome точно так же, как Mozilla (или таким образом, я услышал) и поддерживает parseFromString () метод.

Вот функция, которую я использую (это - часть библиотеки Совместимости браузера, которую я в настоящее время создаю):

function LoadXMLString(xmlString)
{
  // ObjectExists checks if the passed parameter is not null.
  // isString (as the name suggests) checks if the type is a valid string.
  if (ObjectExists(xmlString) && isString(xmlString))
  {
    var xDoc;
    // The GetBrowserType function returns a 2-letter code representing
    // ...the type of browser.
    var bType = GetBrowserType();

    switch(bType)
    {
      case "ie":
        // This actually calls into a function that returns a DOMDocument 
        // on the basis of the MSXML version installed.
        // Simplified here for illustration.
        xDoc = new ActiveXObject("MSXML2.DOMDocument")
        xDoc.async = false;
        xDoc.loadXML(xmlString);
        break;
      default:
        var dp = new DOMParser();
        xDoc = dp.parseFromString(xmlString, "text/xml");
        break;
    }
    return xDoc;
  }
  else
    return null;
}
19
ответ дан jcubic 23 November 2019 в 05:05
поделиться

Я всегда использовал подход ниже который работы в IE и Firefox.

Пример XML:

<fruits>
  <fruit name="Apple" colour="Green" />
  <fruit name="Banana" colour="Yellow" />
</fruits>

JavaScript:

function getFruits(xml) {
  var fruits = xml.getElementsByTagName("fruits")[0];
  if (fruits) {
    var fruitsNodes = fruits.childNodes;
    if (fruitsNodes) {
      for (var i = 0; i < fruitsNodes.length; i++) {
        var name = fruitsNodes[i].getAttribute("name");
        var colour = fruitsNodes[i].getAttribute("colour");
        alert("Fruit " + name + " is coloured " + colour);
      }
    }
  }
}
8
ответ дан John Topley 23 November 2019 в 05:05
поделиться

Смотрите на Синтаксический анализатор XML DOM ( W3Schools). Это - учебное руководство на парсинге XML DOM. Фактический синтаксический анализатор DOM отличается от браузера до браузера, но API DOM стандартизирован и остается тем же (более или менее).

, Кроме того, использование E4X, если Вы можете , ограничивает сами Firefox. Относительно легче использовать, и это - часть JavaScript начиная с версии 1.6. Вот использование небольшой выборки...

//Using E4X
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(xmlDoc.body); //Note: 'body' is actually a tag in note.xml,
//but it can be accessed as if it were a regular property of xmlDoc.
2
ответ дан Peter Mortensen 23 November 2019 в 05:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: