xpath с документом dom - PullRequest
       27

xpath с документом dom

9 голосов
/ 30 августа 2010

Я пытаюсь найти узел XML с запросом xpath. но я не могу заставить его работать. В Firefox результат всегда "неопределен", и Chrome выдает код ошибки.

<script type="text/javascript">

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');

var result = doc.evaluate('/form/name', doc, 
                          null, XPathResult.ANY_TYPE, null);

alert(result.stringValue);

</script>

что не так с этим кодом?

Ответы [ 2 ]

9 голосов
/ 30 августа 2010

Я не знаю, почему вы получили эту ошибку, но вы можете изменить XPathResult.ANY_TYPE на XPathResult.STRING_TYPE и будет работать (проверено в Firefox 3.6).

См:

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');
var result = doc.evaluate('/form/name', doc, null, XPathResult.STRING_TYPE, null);
alert(result.stringValue); // returns 'test'

См. В jsfiddle .


ПОДРОБНОСТИ:

Четвертый параметр метода evaluate - это целое число, в котором вы указываете, какой результат вам нужен ( ссылка ). Существует много типов , таких как целые числа, строки и любые типы. Этот метод возвращает XPathResult , который имеет много свойств.

Необходимо сопоставить свойство (numberValue, stringValue) со свойством, используемым при оценке.

Я просто не понимаю, почему any type не работал с string value.

2 голосов
/ 14 апреля 2012

XPathResult.ANY_TYPE вернет набор узлов для выражения xpath /form/name, поэтому result.stringValue будет иметь проблемы с преобразованием узла, заданного в строку. В этом случае вы можете использовать result.iterateNext().textContent

Однако выражение типа count(/form/name) вернет числовое значение при использовании с XPathResult.ANY_TYPE, и вы можете использовать result.numberValue для получения номера в этом случае.

Более подробное объяснение на https://developer.mozilla.org/en/DOM/document.evaluate#Result_types

...