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