Perl-解析变量中存储为字符串的xml
我在google上做过很多搜索,但是如果字符串中包含XML,是否有一种方法可以解析和获取类似于从文件中提取值的值 以下是一个示例脚本:Perl-解析变量中存储为字符串的xml,xml,perl,Xml,Perl,我在google上做过很多搜索,但是如果字符串中包含XML,是否有一种方法可以解析和获取类似于从文件中提取值的值 以下是一个示例脚本: use strict; use warnings; use XML::LibXML; my $xml = "<family><id>25502</id><father><id>1</id></father><mother><id>2</id>
use strict;
use warnings;
use XML::LibXML;
my $xml = "<family><id>25502</id><father><id>1</id></father><mother><id>2</id></mother><son><id>2</id></son></family>";
my $id = $xml->getElementsByTagName("id")->item(0)->getFirstChild->getData;
print $id;
使用严格;
使用警告;
使用XML::LibXML;
my$xml=“25502212”;
my$id=$xml->getElementsByTagName(“id”)->item(0)->getFirstChild->getData;
打印$id;
在本例中,我无法打印ID。请帮助。谢谢。您似乎误解了对象和XML解析的工作原理。您不能仅仅使用一个模块,然后突然期望它对程序中的所有变量都有影响 如果您阅读了文档,它将向您展示如何将XML字符串解析为文档对象,然后您可以使用各种方法进行查询 您将需要这样的代码:
use strict;
use warnings;
use XML::LibXML;
my $xml = '<family> ... </family>';
my $xml_parser = XML::LibXML->new;
my $doc = $xml_parser->parse_string($xml);
使用严格;
使用警告;
使用XML::LibXML;
我的$xml=“…”;
我的$xml\u parser=xml::LibXML->new;
my$doc=$xml\u解析器->解析字符串($xml);
现在您有了一个XML文档变量(在
$doc
中),您可以在该变量上调用XML::LibXML方法。您编写的代码将使用Dave Cross所描述的修复程序,但它可以变得更加简洁
我推荐这样的东西。请注意,在列表上下文中调用时,getChildrenByTagName
返回XML::LibXML::Node
对象的列表,而不是一个XML::LibXML::NodeList
对象。这同样适用于返回节点列表的任何方法
use strict;
use warnings;
use feature 'say';
use XML::LibXML;
my $xml = <<__END_XML__;
<family>
<id>25502</id>
<father>
<id>1</id>
</father>
<mother>
<id>2</id>
</mother>
<son>
<id>2</id>
</son>
</family>
__END_XML__
my $doc = XML::LibXML->load_xml( string => $xml );
my ($family_id) = $doc->documentElement->getChildrenByTagName('id');
say $family_id->textContent;
如果您希望在XML方面做很多工作,那么您应该熟悉XPath。在它的帮助下,上述作业可以写成
my ($family_id) = $doc->findnodes('/family/id');
你不认为值得一提的是,当你尝试这样做时,你收到了一条错误消息?没有包或对象引用,无法调用方法“getElementsByTagName”
my ($family_id) = $doc->findnodes('/family/id');