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

Я пытаюсь найти узел 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 ответа

Решение

Я не знаю, почему вы получили эту ошибку, но вы можете изменить 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.


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

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

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

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

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

Другие вопросы по тегам