Análisis XML/XHTML en Actionscript
flash parsing (3)
¿Hay algo similar a getElementById en actionscript?
Estoy tratando de hacer un prototipo de una página flash que obtiene sus datos de un archivo xhtml. Quiero tener una versión html accesible (para motores de búsqueda, lectores de texto y personas sin flash) y una versión flash (porque el cliente insiste en usar el flash aunque una solución html-css-ajax sería bastante útil).
Lo que necesito es una forma simple de obtener el texto o los atributos del html con una identificación determinada, como <h1 id="flashdataTitle">This is the title</h1>
etc. Estoy adivinando algunas maneras en que podría ser posible:
- De alguna manera use ExternalInterface.call y haga el truco de DOM en JavaScript (que probablemente sea lo que haré, porque estoy muy familiarizado con JS y soy un novato completo con flash / actionscript, a menos que tenga una mejor solución)
- Cargue el xhtml con la clase Actionscript XML y recorra manualmente el XML buscando el atributo de id correcto (pero probablemente sea muy lento)
- Use XPath con la clase XML en actionscript. (Me gustaría algunos consejos sobre cómo hacer esto, si esta es la manera recomendada)
- ¿Hay realmente un Actionscript equivalente a getElementById para usar con XML?
- Aunque mi empleador espera que no tengamos que hacer esto: podría reescribir el código del lado del servidor para generar los textos relevantes y las URL de la imagen en un formato compatible con flash.
¿Cuál es la forma más efectiva, más fácil de implementar y más robusta de navegador cruzado? ¿Alguna idea totalmente diferente?
Por favor, publique cualquier idea, incluso si cree que la pregunta ha sido respondida, me gustaría explorar todas las diferentes posibilidades, y también las desventajas que tienen las soluciones propuestas.
¿Hay algo como la función prototype.js inspeccionar () en Actionscript? Intenté probar la solución xpath, pero simplemente no funcionará. He probado que xpath es correcto usando scetchpad (creo que así se llama), así que creo que hay un problema con el objeto XML ... Parece que contiene el archivo xhtml cuando lo veo en el depurador, aunque parece bastante caótico, pero si pudiera "inspeccionar" las variables y rastrearlas ayudaría a localizar el problema. (Gracias Tomalak, rechazaré su respuesta tan pronto como mi "reputación" sea lo suficientemente alta).
Por cierto, todavía quiero escuchar otras ideas.
Como dijiste que tu entrada sería XHTML, puedes hacerlo con 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]);
}
El ejemplo de código está inspirado desde aquí , donde también puede encontrar algunos detalles de modo en XPath y ActionScript.
AS3 tiene su propia biblioteca XPath , el enfoque general sería el mismo.
Utilice la propiedad XML.idMap (o XMLDocument.idMap en ActionScript 3.0) si es suficiente con la búsqueda de elementos por id. Este método es probablemente la forma más rápida de hacerlo. Mientras que XPath te brinda capacidades de búsqueda avanzadas, reduce el rendimiento. Entonces, si necesitas algunos elementos con atributos de id, te recomiendo que uses idMap.