【问题标题】:Actionscript 2.0 XMLPath to access a <div> value in a XHTML fileActionscript 2.0 XMLPath 访问 XHTML 文件中的 <div> 值
【发布时间】:2011-11-17 03:06:22
【问题描述】:

我会很感激这里的任何建议。根据我在网上找到的内容,我尝试了以下方法来尝试获得我需要的工作。

我正在使用 Actionscript 2.0 XPath 尝试访问 xhtml 文件中的 &lt;div&gt; 值,但我有这个简单的 Actionscript 无法正常工作:

=====================
stop();

import mx.xpath.XPathAPI;

var rssfeed_xml:XML = new XML();
rssfeed_xml.ignoreWhite = true;
rssfeed_xml.onLoad = function(success:Boolean) {
trace("onload...");
if (success) {
trace("success...");


var elementId:String = "title1";
var elementPath:String = "//div[@id'" + elementId + "']";
found_elements = XPathAPI.selectNodeList(rssfeed_xml.firstChild, elementPath);


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


} else {
trace("error loading XML");
}
};
rssfeed_xml.load("test.xhtml");

=====================

我的 test.xhtml 很简单,如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Landing</title>
</head>

<div id="mainArea">
    <div id="content">
        <div id="calloutContent">
            <div id="title">Search Our QA Database</div>
            <div id="callout1">text1</div>  
            <div id="callout2">text2</div>         
            <div id="callout3">text3</div>
        </div>
    <div id="heroContent">
        <div id="title1">text4</div>
        <div id="title2">text5</div>
    </div>
    </div>
</div>
</body>
</html>

在我的 Actionscript 中,我只是想获取 &lt;div id="title1"&gt; 的值,即“text4”。

Actionscript 代码看起来正确,但我在trace(found_elements[0]); 行上没有收到任何内容。

有什么想法吗?

【问题讨论】:

    标签: flash xpath xhtml actionscript-2 flash-cs5


    【解决方案1】:

    您的问题来自您创建的路径。这是您当前的路径(内联变量):

    "//div[@id'title1']"
    

    这里有几个问题:

    • XHTML 缺少一个开始 &lt;body&gt; 标记
    • 一开始的// 什么都不做。要通配一个节点,您需要使用* 符号。这将为您提供第一个节点深度。要达到您需要的深度,您需要再重复 3 次。
    • 属性名称后缺少=

    此路径适用于您选择的 div:

    "/*/*/*/*/div[@id='title1']"
    

    然而,该路径返回完整的节点,因此只需提取文本,然后请求firstChild.nodeValue

    trace(found_elements[0].firstChild.nodeValue);
    

    这里明显的问题是您必须非常清楚目标节点出现在文档中的什么位置。

    【讨论】:

    • 谢谢 shanethehat。 标签是一个oversite。再次感谢您的路径解释。我会试一试。 xhtml 结构不会改变,所以我确切地知道我需要的&lt;div&gt; 在哪里。我会试一试,让你知道我的进展如何。再次感谢,非常感谢您的帮助。
    • 嗨,shanethehat。我只是尝试过,仍然没有快乐。我更改了主要位,所以现在显示为:var elementPath:String = "/*/*/*/*/div[@id='title1']";found_elements = XPathAPI.selectNodeList(rssfeed_xml.firstChild, elementPath);if (found_elements.length == 1) {trace(found_elements[0].firstChild.nodeValue);} 但仍然没有任何信息出现。有任何想法吗。再次感谢。
    • 对不起,shanethehat,但这是最好的方法吗,使用selectNodeList....有没有更好的方法来获得我想要的确切&lt;div&gt;...也许@987654337 @...只是想知道...任何帮助将不胜感激。再次感谢...
    • @Alan - 对不起,我的错误,通过添加 body 标签,你需要额外的深度:"/*/*/*/*/*/div[@id='title1']"
    • 太棒了...非常感谢您,您是救生员。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多