一个as2的类遍历XML并映射到普通Object。
as2是动态语言,这里发挥它的动态特质,动态构建面向XML节点的对象。
/**
* ...
* @author Default
* @version 0.1
*/
class MediaSolutions.xmlspider.ParseXML
{
private var ONE_PREFIX:String = "---";
public function ParseXML()
{
}
/**
* parse XML into one object
* @param xmltext
* @param traceflag
* @return
*/
public function parse(xmltext:XML,traceflag:Boolean):Object
{
var obj:Object = parseNode(xmltext.firstChild);
if(traceflag)
{
trace(traceXmlObj(obj,ONE_PREFIX))
}
return obj;
}
private function parseNode(node:XMLNode):Object
{
var nodeobj:Object = new Object();
nodeobj.__attr__ = node.attributes;
var cnode:XMLNode = node.firstChild;
while(true)
{
if(cnode == null)
{
break;
}
else if(cnode.nodeType == 3 || cnode.nodeType == 4)
{
nodeobj.__value__ = cnode.nodeValue;
break;
}
else
{
var cnodeName:String = cnode.nodeName;
if(nodeobj[cnodeName] instanceof Array)
{
nodeobj[cnodeName].push(parseNode(cnode));
}
else if(nodeobj[cnodeName] != null)
{
var temp:Object = nodeobj[cnodeName];
nodeobj[cnodeName] = new Array();
nodeobj[cnodeName].push(temp);
nodeobj[cnodeName].push(parseNode(cnode));
}
else
{
nodeobj[cnodeName] = parseNode(cnode)
}
cnode = cnode.nextSibling;
}
}
return nodeobj;
}
/**
* trace info
* @param xmlobj
* @param initlayerPrefix
* @return
*/
private function traceXmlObj(xmlobj:Object, initlayerPrefix:String):String
{
if(xmlobj.__value__ != null)
{
return initlayerPrefix + xmlobj.__value__ + "\n";
}
else
{
var s:String = "";
for(var prop in xmlobj)
{
if(prop != "__value__" && prop != "__attr__")
{
s += initlayerPrefix+prop+"\n"+traceXmlObj(xmlobj[prop],ONE_PREFIX + initlayerPrefix)
}
}
return s;
}
}
}
通过public function parse(xmltext:XML,traceflag:Boolean):Object方法就能返回一个代表XML的Object,有两个参数:
xmltext:XML -- 一个XML对象(注意要先去掉注释)
traceflag:Boolean -- 是否要trace输出结果,主要用来验证解析是否正确
比如有下面一个XML结构
<?xml version="1.0" encoding="utf-8"?>
<slide>
<item>
<id>1</id>
<msg>Windows Live Messenger 2008 est arrivé !</msg>
<picUrl>images/1.jpg</picUrl>
<picLink>http://www.google.com</picLink>
<themeId>0x0099FF</themeId>
</item>
<item>
<id>2</id>
<msg>Messenger Awards : découvrez le Palmarès</msg>
<picUrl>images/2.jpg</picUrl>
<picLink>images/2.jpg</picLink>
<themeId>0x9900FF</themeId>
</item>
<item>
<id>3</id>
<msg>Défiez vos amis au foot sur Messenger !</msg>
<picUrl>images/3.jpg</picUrl>
<picLink>images/3.jpg</picLink>
<themeId>0x0099FF</themeId>
</item>
<item>
<id>4</id>
<msg>Créez votre profil Messenger !</msg>
<picUrl>images/4.jpg</picUrl>
<picLink>images/4.jpg</picLink>
<themeId>0x0099FF</themeId>
</item>
<item>
<id>5</id>
<msg>5555555</msg>
<picUrl>images/4.jpg</picUrl>
<picLink>images/4.jpg</picLink>
<themeId>0x9900FF</themeId>
</item>
</slide>
比如我们要访问其中一个node叫Créez votre profil Messenger !
就用 obj["item"][4]["msg"].__value__
如果是访问属性,就用obj["item"][4]["msg"].__attr__。
__value__和__attr__是对象的特殊field,分别代表文字跟属性集合,当然如果某对象没有文本,就没有__value__对象,但是__attr__一定有,只不过是一个空的object。
分享到:
相关推荐
在编程中,我们通常使用XML解析器将这种结构映射到对象上,使得我们可以像操作普通对象一样操作XML。 在Java中,我们可以使用DOM(Document Object Model)解析器或者SAX(Simple API for XML)解析器来处理XML。...
本篇将深入探讨Object-XML转换的相关知识点,并以Spring框架中的Object-XML映射为例进行详细解析。 首先,让我们理解Object-XML转换的基本概念。在Java中,我们将一个对象转换为XML的过程称为对象序列化,反之称为...
DOM解析器会将整个XML文档加载到内存中,形成一个树形结构,方便遍历和查找,适合小规模的XML文件。SAX解析器则采用事件驱动模型,逐行读取XML,占用内存少,适合处理大型XML文件。根据项目需求,可以选择合适的解析...
- **XStream**:XStream是一个流行的库,可以轻松地将Java对象转换为XML,并将XML反序列化回Java对象。它的语法简洁,易于理解和使用。 - **Castor**:Castor提供了XML到Java对象的映射,支持复杂的数据结构,包括...
它将整个XML文档加载到内存中,形成一个树形结构,允许我们通过节点遍历和操作XML。 - SAX解析:Simple API for XML(SAX)是一种基于事件驱动的解析方式,不将整个文档加载到内存,而是逐个读取元素和属性,适合...
在Struts2中,Map遍历是一个常见的功能,它允许开发者动态地展示或操作存储在Map中的数据。这个功能在处理表单提交、传递参数或者在视图层展示数据时尤为有用。 首先,让我们理解Map遍历的基本概念。Map是一种键值...
2. 创建类结构:根据XML文件的结构,我们可以创建一系列类,每个类代表XML中的一个元素。例如,如果XML文件包含`<person>`元素,我们可以创建一个`Person`类,包含对应于`<name>`、`<age>`等子元素的属性或字段。 `...
这个函数会遍历XML树,遇到`person`元素时,创建一个新的`Person`对象,并设置相应的属性。遇到`name`和`age`这样的文本节点时,调用JavaBean的setter方法。 最后,为了从XML文件中获取数据,我们需要创建一个`...
1. DOM解析:DOM(Document Object Model)模型将XML文档视为一个树形结构,通过创建一个内存中的文档对象模型来解析XML。这种方法适合小规模的XML文件,因为会将整个文件加载到内存中。 2. SAX解析:SAX(Simple ...
下面我们将详细探讨如何实现JavaBean到XML以及XML到JavaBean的转换,并介绍一个用于此目的的工具类和相关的jar包。 首先,JavaBean是一种符合特定规范的Java类,它通常具有公共的getter和setter方法,用于封装属性...
总的来说,"Jquery xml2Json"是一个帮助开发者处理XML数据的实用工具,它简化了XML数据在JavaScript环境中的处理流程,提高了开发效率,是前后端交互中一个非常有价值的辅助工具。通过深入理解这个插件的工作原理和...
DOM将整个XML文档加载到内存中形成一个树形结构,便于遍历和操作,但对内存消耗较大;而SAX是事件驱动的,逐行读取XML,适用于大文件,内存占用少,但不支持随机访问。 2. **JAXB(Java Architecture for XML ...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,方便开发者对整个文档进行遍历和操作。而SAX则是一种事件驱动的解析方式,它逐行读取XML文档,遇到元素、属性等时触发相应的事件,适合处理大型XML文件,...
遍历XML节点时,将数据组织成键值对,存入一个`Object`。 4. **转换为JSON字符串**:使用`JSON.stringify()`方法将AS3的`Object`转换为JSON格式的字符串。然而,AS3标准库并未提供此方法,所以可能需要引入第三方库...
JAXB是Java标准,能够自动将XML映射到Java类,反之亦然。而使用JDOM则需要手动编写解析和构建逻辑,更适合对XML结构有深度控制的情况。 3. **简单XML转换**:描述中提到的`XmlUtil`工具可能是一个简单的XML到对象的...
在描述中提到的博客文章“一次代码重构之旅-快速读写xml文件工具类封装”,作者分享了如何通过Java进行XML操作的优化,将原始的XML处理代码整合到一个工具类中,提供简洁易用的API。在阅读该博客文章的过程中,我们...
2. **创建绑定文件**: 编写一个名为`jaxb bindings`的XML文件,用于指定XML元素和属性如何映射到Java类的字段。 3. **生成XML Schema**: 如果需要,可以通过JAXB的`xjc`工具,从Java类生成对应的XML Schema。 4. **...
2. **生成Java类结构**:根据XSD中的元素和属性,工具自动生成对应的Java类,每个元素变成类的一个字段,属性则作为类的getter和setter方法。 3. **处理复杂类型**:如果XSD中定义了复杂类型,工具会创建相应的Java...
1. **DOM解析器(Document Object Model)**:这是最常见的XML解析方式,它将整个XML文档加载到内存中,形成一个树形结构,便于遍历和操作。Java中的`javax.xml.parsers.DocumentBuilderFactory` 和 `org.w3c.dom....
描述中提到“内含源码”,意味着提供了一个示例代码,你可以参考这个源码学习如何在PB中实现XML到数据窗口的转换。这通常会涉及到对XML处理函数的使用,以及数据窗口对象的操作。在学习和使用这些源码时,需要注意...