Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   не работает getElementsByTagName( 'Field' ) (https://javascript.ru/forum/misc/66730-ne-rabotaet-getelementsbytagname-%27field%27.html)

AlaP 06.01.2017 20:19

не работает 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?

рони 06.01.2017 21:06

AlaP,
textfield.length чему равно?

AlaP 06.01.2017 22:31

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

TestUser013 06.01.2017 22:36

AlaP,
А вы в консоль фактическое значение выведите.

AlaP 06.01.2017 22:36

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

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

в общем, поэтому и возник вопрос (теоретической базы у меня маловато).

AlaP 06.01.2017 22:40

Цитата:

Сообщение от TestUser013 (Сообщение 439893)
AlaP,
А вы в консоль фактическое значение выведите.

я б с удовольствием. но на мои 100+ файлов долго считать вручную(

рони 06.01.2017 22:42

AlaP,
txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";

AlaP 06.01.2017 22:44

Цитата:

Сообщение от рони (Сообщение 439897)
AlaP,
txtString += textfield[b].getElementsByTagName('Text')[0].textContent + " \n ";

не срабатывает. выдается Microsoft JScript runtime error: Object required

innerText тоже пробовала. результат тот же.

рони 06.01.2017 22:49

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>

AlaP 06.01.2017 23:05

Цитата:

Сообщение от рони (Сообщение 439899)
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?


Часовой пояс GMT +3, время: 06:53.