如何使用各种语言解析HTML并解析库?
回答时:
个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.
为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式
语言:[语言名称]
图书馆:[图书馆名称]
[example code]
Run Code Online (Sandbox Code Playgroud)
请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:
目的:[解析的作用]
我的目标是start_tag_handler(见下文)在找到/ tag 时获取apps/ titlecontent (请参阅下面的示例XML).appstitle
并
end_tag_handler在找到/ tag 时获取apps/ logscontent .appslogs
但相反,此代码返回null并退出.
#!/usr/local/bin/perl -w
use XML::Twig;
my $twig = XML::Twig->new(
start_tag_handlers =>
{ 'apps/title' => \&kicks
},
twig_roots =>
{ 'apps' => \&app
},
end_tag_handlers =>
{ 'apps/logs' => \&bye
}
);
$twig -> parsefile( "doc.xml");
sub kicks {
my ($twig, $elt) = @_;
print "---kicks--- \n";
print $elt -> text;
print …Run Code Online (Sandbox Code Playgroud) 我有一个格式的XML文件:
<outer1>
<inner1>
<name>Stonecold</name>
<profession>warrior</profession>
<org>wwf</org>
</inner1>
<inner1>
<name>Shanebond</name>
<profession>Bowler</profession>
<org>newzealand</org>
</inner1>
<inner1>
<name>brain schemidit</name>
<profession>Chairman</profession>
<org>Google</org>
</inner1>
</outer1>
Run Code Online (Sandbox Code Playgroud)
我想改变的价值Shanebond来Shane Bond.
我正在使用XML::Simple,但结果是哈希.
我想要与输入文件相同的格式.例如:输出文件应如下所示:
<outer1>
<inner1>
<name>Stonecold</name>
<profession>warrior</profession>
<org>wwf</org>
</inner1>
<inner1>
<name>Shane Bond</name>
<profession>Bowler</profession>
<org>newzealand</org>
</inner1>
<inner1>
<name>brain schemidit</name>
<profession>Chairman</profession>
<org>Google</org>
</inner1>
</outer1>
Run Code Online (Sandbox Code Playgroud)
请告知如何做到这一点.
提前致谢.
我希望输出文件保存在同一目录中,如果可能的话,使用相同的名称.可能吗?
我想获取一个特定的字符串,例如来自某个XML的<received> 123 </ received>中的123,这些XML将从URL中检索.
我写了一段代码,但仍然遇到错误信息:
尝试在/usr/share/perl5/XML/Twig.pm第392行加入引用.
我该如何解决?
代码:
use XML::Twig;
use LWP::Simple;
my $url = 'http://192.168.1.205:13000/status.xml';
my $twig = new XML::Twig(TwigRoots => {
'smsc/received' => sub {$author = $_[1]->text; }});
$twig->nparse( $url );
$twig->print;
Run Code Online (Sandbox Code Playgroud) 我有以下XML文件:
<SOURCE_SERVER>
<SERVER HOSTNAME="serv1">
<CIFS_SERVICE NETBIOSNAME="serv1"/>
</SERVER>
<SERVER HOSTNAME="serv2">
</SERVER>
<SOURCE_SERVER>
Run Code Online (Sandbox Code Playgroud)
现在,我想孩子补充<CIFS_SERVICE NETBIOSNAME="serv2"/>到<SERVER HOSTNAME="serv2">.如何使用XML :: Twig执行此操作?
我有一个像这样的XML字符串:
<DATA>
<CHILD_DATA ATVAL="value1"/>
<CHILD_DATA />
</DATA>
Run Code Online (Sandbox Code Playgroud)
我想要的最终输出是:
<DATA>
<CHILD_DATA ATVAL="value1"/>
<CHILD_DATA ATVAL="value2"/>
</DATA>
Run Code Online (Sandbox Code Playgroud)
我的树枝$t在<DATA>.现在我想为第二个添加一个属性<CHILD_DATA />.属性是ATVAL="value2".我尝试了以下方法:
$t->last_child('CHILD_DATA')->set_att{"ATVAL","value2"};
Run Code Online (Sandbox Code Playgroud)
这没用.这段代码出了什么问题?还有另一种方法吗?