Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.01.2017, 20:19
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

не работает getElementsByTagName( 'Field' )
помогите, пожалуйста!
есть xml вида
<Receipt>
<Field>
<Text>значение1</Text>
</Field>
<Field>
<Text>значение2</Text>
</Field>
</Receipt>
задача- вытащить поля "значение1" и "значение2".
пробую сделать это так

var textfield = receipt[a].getElementsByTagName( 'Field' );
for( var b = 0; b < textfield.length; b++ ) {
txtString += textfield[b].getElementsByTagName('Text')[0].childNodes[0].nodeValue + " \n ";
}
не работает, вероятно из-за большой буквы F в 'Field' ( если поставить в xml и в коде 'field', то все работает, но xml-ку изменить не могу)

Вопрос - почему не работает getElementsByTagName( 'Field' );
и как это исправить, не затрагивая текст исходного xml?
Ответить с цитированием
  #2 (permalink)  
Старый 06.01.2017, 21:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

AlaP,
textfield.length чему равно?
Ответить с цитированием
  #3 (permalink)  
Старый 06.01.2017, 22:31
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

var receipt = xmlDoc.getElementsByTagName( 'Receipt' );
for ( var a = 0; a < receipt.length; a++) {

var textfield = receipt[a].getElementsByTagName( 'field' );

for( var b = 0; b < textfield.length; b++ ) {...}}

т е, если я все правильно делаю(и понимаю), textfield.length =2
Ответить с цитированием
  #4 (permalink)  
Старый 06.01.2017, 22:36
Аспирант
Отправить личное сообщение для TestUser013 Посмотреть профиль Найти все сообщения от TestUser013
 
Регистрация: 13.07.2013
Сообщений: 94

AlaP,
А вы в консоль фактическое значение выведите.
Ответить с цитированием
  #5 (permalink)  
Старый 06.01.2017, 22:36
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

кстати, вот на этом куске кода выдается : Microsoft JScript runtime error: Object required

но если написать var textfield = receipt[a].getElementsByTagName( 'field' );
(и, соответсвенно, поменять в исходной xml заглавную букву на строчную), то все работает. к сожалению такой вариант мне не подходит из-за огромного количества данных.

в общем, поэтому и возник вопрос (теоретической базы у меня маловато).
Ответить с цитированием
  #6 (permalink)  
Старый 06.01.2017, 22:40
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

Сообщение от TestUser013 Посмотреть сообщение
AlaP,
А вы в консоль фактическое значение выведите.
я б с удовольствием. но на мои 100+ файлов долго считать вручную(
Ответить с цитированием
  #7 (permalink)  
Старый 06.01.2017, 22:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

AlaP,
txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";
Ответить с цитированием
  #8 (permalink)  
Старый 06.01.2017, 22:44
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

Сообщение от рони Посмотреть сообщение
AlaP,
txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";
не срабатывает. выдается Microsoft JScript runtime error: Object required

innerText тоже пробовала. результат тот же.
Ответить с цитированием
  #9 (permalink)  
Старый 06.01.2017, 22:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

AlaP,
<?xml version="1.0" encoding="UTF-8"?>
<recipe type="dessert">
<Receipt>
 <Field>
 <Text>значение1</Text>
 </Field>
 <Field>
 <Text>значение2</Text>
 </Field>
 </Receipt>
</recipe>

<script>

var txtString ='';
var textfield = document.getElementsByTagName( 'Field' );
for( var b = 0; b < textfield.length; b++ ) {
 txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";
 }
 alert(txtString)

  </script>
Ответить с цитированием
  #10 (permalink)  
Старый 06.01.2017, 23:05
Новичок на форуме
Отправить личное сообщение для AlaP Посмотреть профиль Найти все сообщения от AlaP
 
Регистрация: 06.01.2017
Сообщений: 8

Сообщение от рони Посмотреть сообщение
AlaP,
<script>

var txtString ='';
var textfield = document.getElementsByTagName( 'Field' );
for( var b = 0; b < textfield.length; b++ ) {
txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";
}
alert(txtString)

</script>[/html]
вижу, что работает! это очень круто) и я себя чувствую окончательным пеньком, потому что у меня так и не запускается...
тогда есть еще вопрос - может такая ошибка быть из-за того, что я запускаю через отдельный файл(example.js) и потом пытаюсь записать результаты в txt?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не всегда работает скрипт в internet explorer sergo_sv Internet Explorer 0 18.09.2012 21:05
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41