Разбор XML / XHTML в Actionscript - PullRequest
1 голос
/ 12 ноября 2008

Есть ли что-нибудь похожее на getElementById в actionscript?

Я пытаюсь создать прототип флэш-страницы, которая получает данные из файла xhtml. Я хочу иметь как доступную html-версию (для поисковых систем, читателей текста и людей без flash), так и flash-версию (потому что клиент настаивает на использовании flash, хотя решение html-css-ajax вполне подойдет).

Мне нужен простой способ получения текста или атрибутов из html с определенным идентификатором, например <h1 id="flashdataTitle">This is the title</h1> и т. Д. Я предполагаю, что это может быть несколько способов:

  • Каким-то образом используйте ExternalInterface.call и сделайте трюк с DOM в JavaScript (что, вероятно, я и сделаю, потому что я очень хорошо знаком с JS и полным новичком с flash / actionscript, если у вас нет лучшего решения) 1009 *
  • Загрузите xhtml с классом Actionscript XML и вручную обойдите XML, ища правильный атрибут id (но это, вероятно, очень медленно)
  • Использовать XPath с классом XML в actionscript. (Мне бы хотелось несколько советов о том, как это сделать, если это рекомендуемый способ)
  • На самом деле существует ActionScript, эквивалентный getElementById для использования с XML?
  • Несмотря на то, что мой работодатель надеется, что нам не нужно этого делать: я мог бы переписать код на стороне сервера для вывода соответствующих текстов и URL-адресов изображений в формате, удобном для флэш-памяти.

Каков наиболее эффективный, простой в реализации и надежный и кроссбраузерный способ сделать это? Какие-нибудь совершенно разные идеи?

Пожалуйста, опубликуйте любые идеи, даже если вы считаете, что на вопрос был дан ответ, я хотел бы изучить все различные возможности и все недостатки, которые имеют предлагаемые решения.

Ответы [ 3 ]

1 голос
/ 12 ноября 2008

Поскольку вы сказали, что ваш ввод будет XHTML, вы можете сделать это с XPath:

import mx.xpath.XPathAPI;

var elementId:String = "flashdataTitle";
var elementPath:String = "//h1[@id'" + elementId + "']";
found_elements = XPathAPI.selectNodeList(xhtml.firstChild, elementPath);

if (found_elements.length == 1) {
  trace(found_elements[0]);
}

Пример кода основан на здесь , где вы также можете найти некоторые подробности режима в XPath и ActionScript.

AS3 имеет собственную библиотеку XPath , общий подход будет таким же.

0 голосов
/ 25 ноября 2008

Используйте свойство XML.idMap (или XMLDocument.idMap в ActionScript 3.0), если достаточно запроса элементов по идентификатору. Этот метод, вероятно, самый быстрый способ сделать это. Хотя XPath предоставляет вам расширенные возможности запросов, он снижает производительность. Поэтому, если вам нужны некоторые элементы, имеющие атрибуты id, я рекомендую вам использовать idMap.

0 голосов
/ 12 ноября 2008

Есть ли что-нибудь подобное функции prototype.js inspect () в Actionscript? Я пытался протестировать решение xpath, но оно просто не работает. Я проверил правильность xpath с помощью scetchpad (думаю, именно так он и называется), поэтому я считаю, что есть проблема с объектом XML ... Кажется, он содержит файл xhtml при просмотре в отладчике, хотя кажется довольно хаотично, но если бы я мог «проверить» переменные и проследить их, это помогло бы найти проблему. (Спасибо, Томалак, я выскажу ваш ответ, как только моя «репутация» станет достаточно высокой.)

Кстати, я все еще хочу услышать другие идеи.

...