如何使用XML :: LibXML解析<rss>标记以查找xmlns定义

Ken*_*ram 4 rss perl

播客似乎没有一致的方式来定义他们的RSS提要.进入一个为RSS使用不同模式defs的人.

使用XML :: LibXML在RSS URL中扫描xmlnamespace的最佳方法是什么

例如

一个饲料可能是

<rss 
    xmlns:content="http://purl.org/rss/1.0/modules/content/" 
    xmlns:wfw="http://wellformedweb.org/CommentAPI/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
Run Code Online (Sandbox Code Playgroud)

另一个可能是

<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom">
Run Code Online (Sandbox Code Playgroud)

我想在我的脚本中包含对所使用的所有命名空间的评估,以便在解析rs时,可以跟踪相应的字段名称.

不知道那会是什么样子,因为我不确定这个模块是否有能力进行<rss>我想要的标签属性雾化.

hau*_*kex 5

我不确定我到底知道你正在寻找什么样的输出,但XML::LibXML确实能够列出命名空间:

use warnings;
use strict;
use XML::LibXML;

my $dom = XML::LibXML->load_xml(string => <<'EOT');
<rss 
    xmlns:content="http://purl.org/rss/1.0/modules/content/" 
    xmlns:wfw="http://wellformedweb.org/CommentAPI/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
</rss>
EOT
for my $ns ($dom->documentElement->getNamespaces) {
    print $ns->getLocalName(), " / ", $ns->getData(), "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

content / http://purl.org/rss/1.0/modules/content/
wfw / http://wellformedweb.org/CommentAPI/
dc / http://purl.org/dc/elements/1.1/
atom / http://www.w3.org/2005/Atom
sy / http://purl.org/rss/1.0/modules/syndication/
slash / http://purl.org/rss/1.0/modules/slash/
Run Code Online (Sandbox Code Playgroud)

  • XML :: LibXML文档相当广泛和密集(它们基本上是整个XML规范)所以我不会因为忽略这样的事情而对任何人造成错误. (4认同)