Простой парсинг XML
Друзья, помогите разобраться в вопросе
Имеем переменную: var xml = "<program><lang>JavaScript</lang></program>"; Необходимо получить содержимое lang. Решил использовать решение на jQuery var result = jQuery("lang", xml); console.log(result.text()); Все ок. То что нужно. Но.... var xml2 = "<program><lang>JavaScript</lang><lang>PHP</lang></program>"; Выдает содержимое lang все в одной куче. Как получить значение первого или N-го элемента lang? Крутил jQuery час таки он мне все равно выдает значение всех элементов lang. А еще самое обидное, что выдает содержимое всех lang-элементов даже вложенных: var xml3 = "<program><lang>JavaScript</lang><framework><lang>jQuery</lang></framework><lang>PHP</lang></program>"; var result = jQuery("lang", xml3); console.log(result.text()); Выдает ВСЕ элементы lang, даже те которые внутри framework! Есть какой-нибудь не сложный способ корректно распарсить переменную xml3 и подобные ей. |
abrasum,
result.eq(0).text() |
Я в шоке. Не могу поверить что JS все так грустно с обработкой XML.
До этого я имел дело с XML в Java - там все просто как репа! Предложение рони не совсем подходит. Привожу уточняющий пример. var xml = '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <item>item1.</item> <item>item2.</item> <item>bla-bla-bla.</item> <item>hello world</item> <other> <item>Other item1.</item> <item>Other item2.</item> </other> <item>Also other</item> <item>Also other</item> </root>'; Подскажите код на JS который: 1) Получить количество детей 1-го уровня документа (в данном примере это будет: 7) 2) Пройти в цикле всех детей, проверяя название тега (если у потомка имя тега other то не выводить его на печать к примеру) Все решения которые я опробовал (jQuery) прекрасно работают когда нет похожих вложенных элементов, но когда xml имеет структуру как выше просто алес. |
тебе нужно вывести на печать все теги item ? даже те что вложенные в other ?
|
Цитата:
Если я извлекаю Item обычным образом: var result = jQuery("item", xml); то получаю набор из 8ми элементов! Я хотел перебрать этот массив в цикле и напечатать все элементы Item, кроме тех что в other! В языке Java такой документ преобразуется в наборы Element и Node каждый из которых имеет массу функций. Мне достаточно для счастья 5ти: - есть ли у элемента дочерние узлы, - вернуть дочерние узлы элемента, - вернуть количество дочерних узлов, - вернуть название тега элемента (Item/Other) - вернуть текстовое содержимое элемента (содержимое Item) Согласитесь ведь элементарная вещь. Может есть какой-нить плагин для jQuery или есть другая библиотека неjQuery, которая реализует подобное. Вот что я имею ввиду. |
Цитата:
|
abrasum,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> $(function(){ var s = $("root"); alert(s.children().length) //Получить количество детей 1-го уровня документа (в данном примере это будет: 7) var a = s.children().filter(function() { return this.tagName.toLowerCase() != "other" }) alert(a.length) // 6 }); </script> </head> <body> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <item>item1.</item> <item>item2.</item> <item>bla-bla-bla.</item> <item>hello world</item> <other> <item>Other item1.</item> <item>Other item2.</item> </other> <item>Also other</item> <item>Also other</item> </root> </body> </html> |
Цитата:
Цитата:
|
рони,
Да, фигню спорол. Это так просто не получиться. Удалю, пожалуй:) |
не пробовал просто использовать XSLT преобразования?
http://www.w3schools.com/xsl/xsl_client.asp |
Часовой пояс GMT +3, время: 09:36. |