如何从HTML中提取属性和文本?

时间:2014-09-06 18:34:35

标签: javascript regex

我的数据文件包含

等数据
<li class="speaker_index js_only" id="si_4178514"
    data-si_id="4178514" data-speaker_id="20864"
    data-start_offset="9"
    data-end_offset="125">
    <h5>
        <span class="icon-user">speaker: </span>James Brown
        <span class="item_time"><span class="icon-time" title="time">, time: </span>00:01:56</span>
    </h5>
    <p>The chairman opens the meeting</p>
</li>

我会处理这种检索下面结果的数据

start=9
end=125
speaker=James Brown
text=The chairman opens the meeting

我可以查找各种符号并提取我需要的数据,但我想这可以通过结构化和一般方式(可能使用正则表达式)完成。) 最好的方法是创建一个对象数组(每个对象都有键startendspeakertext)。

使用JavaScript实现目标的最佳和最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

当您使用JavaScript时,您可以使用jQuery。

获取起始值的示例(请注意,您也可以传递包含HTML的字符串而不是选择器):

var $data = $("#data");
var $li = $("li", $data);
var startOffset = $li.attr("data-start_offset");

alert("start: " + startOffset);

http://jsfiddle.net/j8drarha/5/

答案 1 :(得分:0)

如果您的数据是有效的XML,那么您可以执行简单的XSLT转换,例如:

<xsl:template match="li">
    start=<xsl:value-of select="@data-start_offset"/>
    end=<xsl:value-of select="@data-end_offset"/>
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="p">
    text=<xsl:value-of select="."/>
</xsl:template>

如果你不想参与XSLT,那么按照@ Rhumborl的建议,你可以将HTML加载到浏览器中,这是所有最好的HTML解析器之后,然后访问你想要的以下(除非你是一个受虐狂或真的想支持过时的浏览器,否则不需要jQuery):

start = document.querySelect('li').getAttribute('data-start_offset');

或者如果您愿意

start = document.querySelect('li').dataset.start_offset

等等。或者,你可以像他提到的那样使用xpath:

start = document.evaluate('//li/@data-start_offset', ...);

您可以编写一个快速JS程序并在无头浏览器(如PhantomJS)下运行它,并将所需结果直接输出到控制台,如

console.log("start=", start);

并将其作为

运行
phantomjs extract_data.js input.js > output