易截截图软件、单文件、免安装、纯绿色、仅160KB

转藏:Perl 处理XML XML::Parser::Expat

当在Perl中使用XML时,你会有将近五百个CPAN模块可以选择,每一个都支持整合Web服务的不同方面。此外,Perl的核心库包括多个支持XML的模块。这篇文章就关注于一个最早期且涉及最频繁的核心模块:XML::Parser.
XML::解析器系列
最初的Perl解析器XML::Parser::Expat由Larry Wall在几年前编写并由Clark Cooper保持延续。模块作为Expat XML parser的界面由James Clark用C语言编写且已经被一些脚本语言所采用。
Expat是一个以事件为基础的解析器,意味着特定条件触发处理功能。例如,一个开始或结尾标记将触发适当的用户定义子程序。XML::Parser模块在Expat功能的基础上为普通应用所建构。
注意Expat在解析之前不会使XML生效且在遇到错误出现时会失效。这些限制会使XML::Parser模块速度非常之快。
XML::Parser简介
任何人都可以在Perl中编写一个XML解析器。毕竟你只是处理具有已知格式的文本。但由于XML::Parser模块是用C编写的,他比任何你可以实现的纯Perl应用要更有效的多。而且既然他已经被编写出来,你就可以把时间花在其他更有用的事情上。
XML::Parser的Expat的功能允许你定义所使用的解析器的样式。最普遍使用的样式是Tree和Stream,Tree处理XML的输入,创建含有文件中的元素和数据的成套数组,这样你就可以按照你的意愿控制这个结构。Stream将分析行为划分层级,在一个事件的开始做处理,要使用Stream,你必须在你对模块做例示并将其与描述事件出现时如何处理的子程序相关联时定义处理器。
其它样式还包括:Sub,允许你特定地对一种XML标记定义其功能。Debug,将文件显示未标准输出。Object,与Tree相似但是返回对象。你也可以通过在XML::Parser类中定义一个子类来设定一个客制样式。
一个例子
这个例子中,我将使用XML::Parser类来创建一个Stream解析。我将带出一个将XML文件解析为标准输出的简单脚本程序,你可以在表A中看到脚本程序(xmlparse.pl),在表B中看到XML文件(data.xml)。这里,由于这是一个命令行脚本,我选择不解析URL元素。要执行这个脚本程序,在命令提示下,键入:
perl xmlparse.pl data.xml
脚本先参照适当的模块:
use XML::Parser;
 
接着,从命令提示输入抓取文件:
my $xmlfile = shift;
die "Cannot find file "$xmlfile""
unless -f $xmlfile;
脚本设置一些初始变量:
$count = 0;
$tag = "";
然后是创建解析器实例:
my $parser = new XML::Parser;
现在我们定义事件处


相关文档:

10本经典XML及Web相关电子书


XML How to Program

Beginning Xml Databases

Beginning XSLT and XPath Transforming XML Documents and Data

ASP.NET 2.0 XML

XML 手册 4th Edition

XML Schema Complete Reference
......

JAVA 中用XML实现INI文件格式的解决方案

        这篇文章被转载的次数最多,其实代码简陋得我自己都看不下去。只不过发表这篇文章时很多人需要这个功能。
     
      这几天写个数据库查询分析器,要用到XML记录用户注册的数据库连接地址、端口等信息,最开始想用java ......

一些工具函数 Xml 序列化

  public sealed class XmlHelper
{
public static void Serialize<T>(T obj,string fileName)
{
TextWriter writer = new StreamWriter(fileName);
try
{
XmlSerializer ser = new XmlSerializer(typeof(T));
......

读写XML文件

原文:使用 MSXML 分析器处理 XML 文档
#include <atlbase.h>
#include <iostream>
using namespace std;
//<?xml version="1.0"?>
//<xmldata>
    //<xmlnode />
    //<xmltext>Hello, World!</xmltext>
//</xmldata>
void main ......

如何在 XML 文件中取得指定属性的相关值?

两种方法:
其一,使用 SelectNodes 的方法;以下例子为使用此方法的处理。
其二,使用 XQuery 的方法。
    ''' <summary>
    ''' 从 XML 文件中取得对应ID 的语言值
    ''' </summary>
    ''' <param name="textID">输入的ID< ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号