E4X: проанализировать документ с узлами пространства имен и переменной для оценки? - PullRequest
1 голос
/ 10 октября 2009

Я пытаюсь проанализировать документ с узлами, которые выглядят примерно так:

<doc>
<results>
        <result xmlns="http://www.inktomi.com/">
            <title>Senate Panel to Review Election Unit Sale</title>
        </result>
</result>
</doc>

Однако пространство имен и имя узла результата могут отличаться. Если бы это было не так, это сработало бы:

results..*::title //>Senate Panel to ...

но это не значит:

var myvar = "title"
results..*::[myvar] 

какие-нибудь подсказки?

Ответы [ 3 ]

1 голос
/ 12 октября 2009

Таким образом, правильное решение, по-видимому, таково:

var myvar = "title"
var ans = results..*.(localName()==myvar);

Спасибо @xtyler в Твиттере за поиск ответа

0 голосов
/ 12 октября 2009

Не решение E4X, но вы можете перебрать все доступные пространства имен, возвращаемые функцией xml.namespaceDeclarations (), а затем либо получить первый дочерний элемент, либо использовать квадратные скобки для доступа к нему.

Вы также можете просто предварительно проанализировать xml и сделать все пространства имен такими же, как быстрое исправление.

0 голосов
/ 10 октября 2009

Очевидно, что способ доступа к дочерним элементам в квадратных скобках и использование * для выбора любого пространства имен не работают вместе

var doc:XML = 
<doc> 
    <results> 
        <result xmlns="http://www.inktomi.com/">  
            <title>Senate Panel to Review Election Unit Sale</title> 
        </result>
    </results>
</doc>;
var ns:Namespace = new Namespace("http://www.inktomi.com/");
trace(doc..*::title.toXMLString()); //These three 
trace(doc.results.*::result);       //lines compile
trace(doc.results.ns::["result"]);  //and run as expected
//This commented out line compiles but throws 2 verify errors in the run time
//trace(doc.results.*::["result"]); 

VerifyError: Ошибка # 1080: недопустимое значение для пространства имен.
ReferenceError: Ошибка № 1065: тест переменной не определен.

Класс VerifyError представляет ошибку, которая возникает при обнаружении поврежденного или поврежденного SWF-файла.

...