首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

2012-02-09 
怎样获取XML文档中子节点的信息如题,我的XML文档如下:?xml version1.0 encodingutf-8?bookstore

怎样获取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 );
.....
.....
}

热点排行