Использование пространств имен XPath в Firefox - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь проанализировать XML-файл в Javascript, игнорируя пространство имен XML-файла. Я не ожидаю, что пространство имен xml-файла изменится в будущем, хотя я был бы счастлив, если бы код работал, даже если пространство имен изменилось произвольно. Я безуспешно пытался следовать этим инструкциям .

Что мне нужно изменить, чтобы моя вторая версия успешно нашла узел xml? Ниже мой код, который не работает, как ожидалось. В частности, третий вызов Components.utils.reportError выводит null).

Javascript (в расширении Firefox):

Components.utils.reportError("XML A: " + docky.documentElement);
var testxpath = '//' + docky.documentElement.tagName + ":entry";
Components.utils.reportError("Test XPath: " + testxpath);
Components.utils.reportError(docky.evaluate(testxpath, docky, 
    function(){return 'http://tempuri.org/';}, 
    XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue);

XML-файл:

<OutputBlob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns="http://tempuri.org/">
    <rnd>
        <double>0.23500252665719135</double>
        <double>0.82559380951597994</double>
        <double>0.33431208335529644</double>
        <double>0.91389494431852125</double>
    </rnd>
</OutputBlob>

Выход:

XML A: [object Element]
Test XPath: //OutputBlob:entry
null

Вариант моего кода, найденный ниже (то есть, где пространства имен не задействованы), работает как ожидалось. То есть третий вызов Components.utils.reportError не выводит null.

Javascript (в расширении Firefox):

Components.utils.reportError("XML A: " + docky.documentElement);
var testxpath = '//' + docky.documentElement.tagName;
Components.utils.reportError("Test XPath: " + testxpath);
Components.utils.reportError(docky.evaluate(testxpath, docky, null, 
    XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue);

XML-файл:

<OutputBlob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <rnd>
        <double>0.23500252665719135</double>
        <double>0.82559380951597994</double>
        <double>0.33431208335529644</double>
        <double>0.91389494431852125</double>
    </rnd>
</OutputBlob>

Выход:

XML A: [object Element]
Test XPath: //OutputBlob
[object Element]

1 Ответ

0 голосов
/ 24 августа 2011

Исправлено: Заменить

var testxpath = '//' + docky.documentElement.tagName + ":entry";

с

var testxpath = '//entry:' + docky.documentElement.tagName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...