2013-02-17 2 views
0

Я пытаюсь parseXML строку из элемента массива и перебирать его элементы, но не могу заставить его работать! это меня заводит, потому что, если я определяю эту строку как «строку», она отлично работает ... любая помощь? Что мне не хватает ?!Проведите анализ строки массива как XML

Это содержимое элемента строки массива, доступ в theContent[1]:

<?xml version="1.0" encoding="utf-8" ?> 
<ROOT> 

    <ITEM> 
    <NAME>123</NAME> 
    </ITEM> 

    ... 

</ROOT> 

Это кусок кода, чтобы прочитать пункты:

var xmlDOM = $.parseXML(theContent[1]); 
var items = $(xmlDOM).find('ROOT ITEM'); 
$.each(items, function (key, val) { 
    alert($(val).find('NAME').text()); 
}); 

Как я сказал, что если я определяю XML как строка (например, ниже), она работает, но она отказывается работать, когда вытягиваете xml из этой строки элемента массива !?

var theContent = '<?xml version="1.0" encoding="utf-8" ?><ROOT><ITEM><NAME>123</NAME>/ITEM> ... </ROOT>'; 

@Alexander

«массив» загружается из текстового файла и его что-то вроде этого:

Some text...|<?xml version="1.0" encoding="utf-8" ?><ROOT><ITEM><NAME>123</NAME>/ITEM> ... </ROOT> 

Я разделив весь текст к | char, используя элемент 1-го массива в качестве текста, а затем пытается проанализировать элемент 2-го массива как XML. Как я объяснил выше, я не могу прочитать дочерний текст, но если я вызываю alert(typeOf(theContent[1]));, он возвращает String, поэтому после анализа XML он должен работать так же, как при построении строки в коде, не так ли?

+0

Показать массив – Alexander

+0

@ Александр: Я отредактировал сообщение ... спасибо за любую помощь. –

ответ

0

Ну, я наконец понял, что это неловко, но хорошо, это работает.

Исходный файл txt имеет разрывы строк, как и любой файл кода, поэтому перед попыткой разобрать строку как XML мне пришлось перебирать ее, удаляя любые «return» и «line», и теперь это работает нормально. Итак, фрагмент кода перед XML-анализом выглядит примерно так:

// 1st - split the string from the array by '\n'. 
var theXML = theContent[1].split("\n"); 

// 2nd - replace any '\r' with nothing and store it in a new var (xmlString) 
//  that will later be parsed as XML. 
var xmlString = ""; 
$.each(theXML, function (n, elem) { 
    elem = elem.replace('\r', ''); 
    xmlString += elem; 
}); 

// 3rd - now the new string (xmlString) as no '\r' and will be well parsed as XML. 
//  the initial var (theXml) is replaced with the resulting parsed XML 
//  and items are accessible. 
theXML = $.parseXML(xmlString); 
var items = $(theXML).find('ROOT ITEM'); 
$.each(items, function (key, val) { 
    alert($(val).find('NAME').text()); 
}); 

Надеюсь, это поможет другим.

В любом случае спасибо за внимание Alexander.

Смежные вопросы