读书人

怎样获取XML文档中子节点的信息,该如何

发布时间: 2012-02-09 18:22:27 作者: rapoo

怎样获取XML文档中子节点的信息
如题,我的XML文档如下:
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
</bookstore>
比如说我想获得根结点下第一个Book节点的子节点信息。
我自己写了一段代码,但无法实现此功能,望高手赐教!
use XML::DOM;

my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile('Books.xml');

my @nodes = $doc->getElementsByTagName ("book");

my @thisName = $nodes [0]->getFirstChild;
$txt=$thisName[0]->getNodeName();
print $txt."\n";


[解决办法]
如果简单应用,试一下XML::Simple就可以了。

example:

use XML::Simple;

my $xml = XML::Simple->new;
my $result = $xml->XMLin("Books.xml");
print %$result->{'book'}->{'price'},"\n";

-------------------
#Result: 29.99


如果想用XML::DOM, 去参考一下cpan上的文档。

my $dom_parser = new XML::DOM::Parser; # create a parser object
my $doc = $dom_parser->parsefile( "Books.xml" ); # make it parse a file
my $paras = $doc->getElementsByTagName( '*' );

my $firstTag = 'book';
my $para = $paras->item{$firstTag};
my @children = $para->getChildNodes;
foreach my $node (@children)
{
print $node->getTagName if( $node->getNodeType eq ELEMENT_NODE );
.....
.....
}

读书人网 >perl python

热点推荐