//简单 XML 解析 import string.xml; import console; var xmlstr = /* ]]> */ var 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 每个 XML 节点对象都是一个表对象(table), 这些 XML 节点对象如果有 tagName 属性表示标记名 - 那他就是一个普通节点。 如果没有 tagName 属性而是拥有 text 或 cdata属性 - 那就说明它是一个 text 文本节点或者是 cdata 节点。 string.xml 提供以下四种类型的节点: 1. 拥有标签名( tagName 属性)的普通 XML 元素 普通 XML 节点使用 tagName 属性表示 XML 标记名, 在 string.xml 中 "tagName"属于保留的 XML 属性,其他属性使用此属性名将会被自动忽略。 > XML 声明节点的 tagName 为"?xml" 2. 顶层根节点 string.xml 总是虚拟出一个空的没有 tagName 属性的顶层根节点, 这个根节点是文档里的 XML 真实根节点的父节点。 3. 文本节点 文本节点使用 text 属性表示文本,无 tagName 属性,无其他属性。 4. CDATA节点 CDATA 节点使用 cdata 属性表示数据, 无 tagName 属性,无其他属性 注释节点被自动忽略不会存为节点对象。 **/ /* string.xml 也可以用来解析HTML, 对于XML,HTML中的笔误等努力尝试修正为正确的结构(例如属性值为空或没放在引号中,标记忘记关闭, 忘记写开始标识不配对,或大小写首尾不匹配 - 关于大小写会首先尝试严格配对,配对不成功会检测是否笔误并进行修正 ) 注意此支持库的作用是简单解析,校验XML错误等不是此支持库的目标, 所以只会尽可能的解析出能解析的结果,尽可能宽容错误写法并试图自动修正。如果需要比较严谨的XML解析器 - 请使用标准库中的 web.msxml */ console.pause()