在 ActionScript 中解析 XML/XHTML

问题描述 投票:0回答:3

ActionScript中有类似getElementById的东西吗?

我正在尝试制作一个 Flash 页面的原型,它从 xhtml 文件获取数据。我想要一个可访问的 html 版本(对于搜索引擎、文本阅读器和没有 flash 的人)和一个 flash 版本(因为客户坚持使用 flash,即使 html-css-ajax 解决方案会做得很好)。

我需要的是一种从具有特定id的html中获取文本或属性的简单方法,例如

<h1 id="flashdataTitle">This is the title</h1>
等。我猜测可能有几种方法:

  • 以某种方式使用ExternalInterface.call并在JavaScript中进行DOM欺骗(这可能是我会做的,因为我非常熟悉JS并且是flash/ActionScript的完全新手,除非你有更好的解决方案)
  • 使用 ActionScript XML 类加载 xhtml,并手动遍历 XML 查找正确的 id 属性(但这可能非常慢)
  • 在 ActionScript 中将 XPath 与 XML 类结合使用。 (如果这是推荐的方式,我想要一些关于如何执行此操作的提示)
  • 实际上有一个相当于 getElementById 的 ActionScript 可以与 XML 一起使用?
  • 虽然我的雇主希望我们不必这样做:我可以重写服务器端代码,以 Flash 友好的格式输出相关文本和图像 URL。

最有效、最容易实现且稳健的跨浏览器方法是什么?有什么完全不同的想法吗?

即使您认为问题已得到解答,也请发表任何想法,我想探索所有不同的可能性,以及所提出的解决方案有哪些缺点。

xml flash parsing xhtml actionscript-2
3个回答
1
投票

既然您说您的输入将是 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]);
}

代码示例的灵感来自于here,您还可以在其中找到有关 XPath 和 ActionScript 的一些模式详细信息。

AS3有自己的XPath库,一般方法是一样的。


0
投票

Actionscript中有类似prototype.js函数inspect()的东西吗?我尝试过测试 xpath 解决方案,但它不起作用。我已经使用 scetchpad 测试了 xpath 是否正确(我认为这就是它的名字),所以我认为 XML 对象存在问题...在调试器中查看它时,它似乎包含 xhtml 文件,尽管看起来似乎相当混乱,但如果我可以“检查”变量并跟踪它们,这将有助于定位问题。 (谢谢Tomalak,一旦我的“声誉”足够高,我就会投票给你的答案。)

顺便说一句,我还想听听其他想法。


0
投票

如果通过 id 查询元素就足够了,请使用 XML.idMap(或 ActionScript 3.0 中的 XMLDocument.idMap)属性。此方法可能是最快的方法。虽然 XPath 为您提供了高级查询功能,但它会降低性能。因此,如果您需要一些具有 id 属性的元素,我建议您使用 idMap。

© www.soinside.com 2019 - 2024. All rights reserved.