Я ищу решение Javascript для этой проблемы:
У меня есть документ XML, который загружается с помощью типичного метода AJAX:
var xml = http.responseXML;
Рассмотрим следующий пример фрагмента xml:
<main>
<primary>
<enabled>true</enabled>
</primary>
<secondary>
<enabled>true</enabled>
</secondary>
</main>
Я хотел бы получить значение узла, указав путь следующим образом:
var second_enabled = getNodeValueByPath('main/secondary/enabled', xml);
Я не могу найти какой-либо краткий способ сделать что-то подобное. Кажется, я вынужден перебирать коллекции узлов после использования getElementsByTagName
и т. П.
Как бы я сконструировал метод getNodeValueByPath
или в Javascript есть какая-то конструкция, позволяющая это сделать?
Я не очень хорошо разбираюсь в Javascript.
РЕДАКТИРОВАТЬ: Вот пример, который показывает мою попытку использования XPath и как он терпит неудачу:
XML:
<?xml version="1.0" ?>
<main xmlns="example.com">
<primary>
<enabled>true</enabled>
</primary>
<secondary>
<enabled>false</enabled>
</secondary>
</main>
JavaScript: (это только соответствующие функции)
function useHttpResponse()
{
if (http.readyState == 4)
{
if(http.status == 200)
{
var xml = http.responseXML;
var evalue = getXMLValueByPath('/main/secondary/enabled', xml);
alert(evalue);
}
}
}
function getXMLValueByPath(nodepath, xml)
{
var result = xml.evaluate(nodepath, xml, null, XPathResult.STRING_TYPE, null).stringValue;
return result;
}
Я использую вышеупомянутый JavaScript без каких-либо дополнительных библиотек. Я использую Mozilla Firefox 3.6.13, который использует метод document.evaluate для выбора узлов (согласно этой информации из w3schools ). Это приложение предназначено для внутреннего использования и не должно работать в нескольких браузерах.
С учетом этих примеров появится диалоговое окно с предупреждением, но без текста. Если я удаляю строку xmlns="example.com"
из документа XML, появляется диалоговое окно с текстом «false», если необходимо.
Отладка с использованием Firebug показывает, что resultNode
является пустой строкой, пока объявлено пространство имен.