Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.09.2015, 00:44
Интересующийся
Отправить личное сообщение для abrasum Посмотреть профиль Найти все сообщения от abrasum
 
Регистрация: 23.07.2009
Сообщений: 10

Простой парсинг 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 и подобные ей.
Ответить с цитированием
  #2 (permalink)  
Старый 11.09.2015, 01:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,059

abrasum,
result.eq(0).text()
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2015, 00:31
Интересующийся
Отправить личное сообщение для abrasum Посмотреть профиль Найти все сообщения от abrasum
 
Регистрация: 23.07.2009
Сообщений: 10

Я в шоке. Не могу поверить что 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 имеет структуру как выше просто алес.
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2015, 00:48
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

тебе нужно вывести на печать все теги item ? даже те что вложенные в other ?
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2015, 22:29
Интересующийся
Отправить личное сообщение для abrasum Посмотреть профиль Найти все сообщения от abrasum
 
Регистрация: 23.07.2009
Сообщений: 10

Сообщение от caetus Посмотреть сообщение
тебе нужно вывести на печать все теги item ? даже те что вложенные в other ?
Да в том-то и дело что other выводить не нужно.
Если я извлекаю Item обычным образом:
var result = jQuery("item", xml);

то получаю набор из 8ми элементов!
Я хотел перебрать этот массив в цикле и напечатать все элементы Item, кроме тех что в other!
В языке Java такой документ преобразуется в наборы Element и Node
каждый из которых имеет массу функций. Мне достаточно для счастья 5ти:
- есть ли у элемента дочерние узлы,
- вернуть дочерние узлы элемента,
- вернуть количество дочерних узлов,
- вернуть название тега элемента (Item/Other)
- вернуть текстовое содержимое элемента (содержимое Item)

Согласитесь ведь элементарная вещь. Может есть какой-нить плагин для jQuery или есть другая библиотека неjQuery, которая реализует подобное. Вот что я имею ввиду.
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2015, 22:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,059

Сообщение от abrasum
var result = jQuery("item", xml);
то получаю набор из 8ми элементов!
так напишите правильно что хотите извлечь , jQuery позволяет сделать все перечисленные вами выборки.
Ответить с цитированием
  #7 (permalink)  
Старый 22.09.2015, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,059

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>
Ответить с цитированием
  #8 (permalink)  
Старый 23.09.2015, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,059

Сообщение от sortarray
//>>>> 8
Сообщение от abrasum
(в данном примере это будет: 7)
у кого-то не сходится
Ответить с цитированием
  #9 (permalink)  
Старый 23.09.2015, 18:33
Кандидат Javascript-наук
Отправить личное сообщение для sortarray Посмотреть профиль Найти все сообщения от sortarray
 
Регистрация: 19.09.2015
Сообщений: 117

рони,
Да, фигню спорол. Это так просто не получиться. Удалю, пожалуй
Ответить с цитированием
  #10 (permalink)  
Старый 11.10.2015, 03:23
Аспирант
Отправить личное сообщение для Фридрих Посмотреть профиль Найти все сообщения от Фридрих
 
Регистрация: 10.09.2013
Сообщений: 59

не пробовал просто использовать XSLT преобразования?
http://www.w3schools.com/xsl/xsl_client.asp
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг из xml Vasy Общие вопросы Javascript 19 13.03.2013 16:15
парсинг xml с сайта используя js teanrus Общие вопросы Javascript 5 18.12.2012 12:36
парсинг XML с параметрами javaScript-ом Sveta AJAX и COMET 5 22.10.2012 11:20
Парсинг XML в IE eternal AJAX и COMET 1 20.11.2011 00:25
не работает парсинг XML в IE Enxiro jQuery 6 25.08.2010 12:26