我正在尝试使用meta-tag解析HTML:
<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">
html :: parser返回此“”空值而不是所需的实际值。这是我的代码,描述了启动事件处理程序:
sub start {
my ($self, $tagname, $attr, $attrseq, $origtext) = @_;
if ($tagname eq 'meta') {
print "Meta found: ", $attr->{ name }, $attr->{content}, "\n";
}
}
有关如何获得所需价值的任何想法?
答案 0 :(得分:0)
我认为来自Charles Babbage的引用适用于此:
有两次我被问到 - “请告诉巴贝奇先生,如果你把错误的数字输入机器,那么正确的答案会出来吗?”[...]我无法正确理解这种混淆可能引发这样一个问题的想法。
- 哲学家生活的段落(1864)
这被称为Garbage-In, Garbage-Out (GIGO)原则。在您的情况下,您的HTML格式不正确。如果将其提供给HTML解析器,则必然会出现虚假输出。 HTML标准已经非常宽松,无法处理各种常见错误,但你的例子更加破碎。
当然,有一种解决方案:不要将您的输入视为HTML,而是将某些衍生格式视为合法输入。您必须编写自己的自定义解析器或根据需要调整现有的HTML解析器,但这样可行。
但是,我认为修复输入源比编写自己的解析器更容易。所需要的只是要转义的属性中的引号,或者属性使用单引号:
<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">
<meta name="id" content='"12345.this.is.a.sample:id:required.67890"@abc.com'>
答案 1 :(得分:0)
好的,找到了获取此特定问题内容的方法。上面的 $ origtext 变量获取 argspec标识符 文本的值,该值在文档中定义为:
Text causes the source text (including markup element delimiters) to be passed.
所以,基本上,
print $origtext;
会给我输出源文本:
<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">
我可以使用正则表达式来利用$origtext
中包含的这个值并获得所需的东西。