aardio 文档

aardio 范例:简单 XML 解析

//简单 XML 解析
import string.xml;
import console;

var xmlstr =  /* 
<?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="aardio工程3" libEmbed="true" icon="...">
<file name="main" path="main.aardio" > 
</file>
<folder name="资源文件" path="res" embed="true">
<![CDATA[ 
<folder name="资源文件" path="res" embed="true">
]]>
</folder>
<folder name="库" path="lib">
</folder>
<abc />
</project> 
*/

xmlDoc = string.xml( xmlstr )

/*
上面的xmlDoc表示根节点,
xmlDoc包含一个所有子节点的数组,
例如 xmlDoc[1] 表示第一个子节点.

注意string.xml里返回的所有节点对象都是数组形式存在,
例如这里即使只有一个project节点,也要写xmlDoc.project[1]

以 xmlDoc.project[1] 为例,其所有子节点可以用数组索引如下访问
xmlDoc.project[1][1] 第一个子节点
xmlDoc.project[1][2] 第二个子节点

如果要找xmlDoc.project[1]下的forder节点,就要这样写
xmlDoc.project[1].folder[1] 第一个folder子节点
xmlDoc.project[1].folder[2] 第二个个folder子节点
*/

var project = xmlDoc.queryEles( tagName = "project"); 
for(index,tagName,childCount,xNode in project[1].eachChild() ){
    console.log( index,tagName,childCount,xNode.outerXml() ) 
}

/**
string.xml里一个节点对象是一个表,
这个节点对象如果有tagName属性表示标记名 - 那他就是一个普通节点。
如果没有tagName而是用text或cdata属性 - 那就说明他是一个text文本节点或者是cdata文本节点。
========================================
普通节点使用 tagName 属性表示XML标记名,
"tagName"属于保留字,其他属性使用此名字会被自动忽略,
根节点无tagName,注意这里的根节点指的是文档里的XML根节点的父节点,也就是总是虚拟出一个空的根节点。

文本节点使用 text 属性表示文本,无tagName,无其他属性
CDATA节点使用 cdata 属性表示数据, 无tagName,无其他属性

注释节点被自动忽略不会存为节点对象
xml声明节点的tagName为"?xml"
**/


/*
string.xml 也可以用来解析HTML,
对于XML,HTML中的笔误等努力尝试修正为正确的结构(例如属性值为空或没放在引号中,标记忘记关闭,
忘记写开始标识不配对,或大小写首尾不匹配 - 关于大小写会首先尝试严格配对,配对不成功会检测是否笔误并进行修正 ) 

注意此支持库的作用是简单解析,校验XML错误等不是此支持库的目标,
所以只会尽可能的解析出能解析的结果,尽可能宽容错误写法并试图自动修正。如果需要比较严谨的XML解析器 - 请使用标准库中的 web.msxml 
*/

console.pause()

Markdown 格式