Простой парсинг 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, время: 13:04. |