萨克斯 js
XML 和 HTML 的sax 风格解析器 .
设计与 节点 记住,但应该很好 浏览器或其他普通JS执行.
这是什么
- 一个通过 XML 字符串解析的非常简单的工具.
- 向流式 HTML 解析器跳动的石块 .
- 处理RSS和其他大多是OK-但kind-broked XML的方便方法 医生.
这大概不是
- HTML 解析器 - 这是一个很好的目标, 但这不是它。 这只是 XML (英语).
- DOM 构建器 - 您可以用它从 XML 中构建对象模型, 但它并没有做到这一点 出盒子.
- XSLT - 无 DOM = 无查询.
- 100%与(一些其他SAX执行)兼容——大多数SAX 执行在Java中,并且做的比这要多得多.
- XML 验证器 - 它在严格模式下做一些验证,但是 没什么.
- 一个 Schema- Aware XSD 软件 {\fn华文楷体\fs16\1cHE0E0E0}什么? {\fn华文楷体\fs16\1cHE0E0E0}Schemas是迷信运动 受虐狂风行.
- 一个DTD感知到的东西 - 获取DTD是更大的工作.
关于 <!DOCTYPEs 和 <!ENTITY编号
解析器将在文本节点和属性中处理基本的 XML 实体
值 : & < > ' "。可以定义额外的
在 XML 中,将它们放入 DTD 。 这个解剖师什么也做不了
与那个。 如果你想听的话 ondoctype 事件,然后获取
文档类型,并读取实体并添加到 parser.ENTITIES,则
请便.
未知实体在严格模式下会失败, 在松散模式下会通过 穿过未爆出.
使用量
var sax = require('./lib/sax'),
strict = true, // set to false for html-mode
parser = sax.parser(strict)
parser.onerror = function (e) {
// an error happened.
}
parser.ontext = function (t) {
// got some text. t is the string of text.
}
parser.onopentag = function (node) {
// opened a tag. node has "name" and "attributes"
}
parser.onattribute = function (attr) {
// an attribute. attr has "name" and "value"
}
parser.onend = function () {
// parser stream is done, and ready to have more stuff written to it.
}
parser.write('<xml>Hello, <who name="world">world</who>!</xml>').close()
// stream usage
// takes the same options as the parser
var saxStream = require('sax').createStream(strict, options)
saxStream.on('error', function (e) {
// unhandled errors will throw, since this is a proper node
// event emitter.
console.error('error!', e)
// clear the error
this._parser.error = null
this._parser.resume()
})
saxStream.on('opentag', function (node) {
// same object as above
})
// pipe is supported, and it's readable/writable
// same chunks coming in also go out.
fs.createReadStream('file.xml')
.pipe(saxStream)
.pipe(fs.createWriteStream('file-copy.xml'))
参数
将以下参数传递到 parser 函数 。 这些都是可选的.
strict -布尔 是否要成为一个混蛋。 默认 : false。 。 。 .
opt - 关于字符串格式化的设置对象包。 全部默认为 false。 。 。 .
支持设置 :
trim-布尔 是否修剪文本和注释节点 .normalize-布尔 如果真实, 那么将任何空白变为单个 空间.lowercase-布尔 如果真实, 那么小写标记名称和属性名称 在松散模式下,而不是在他们上方.xmlns-布尔 如果为真,则支持命名空间 .position-布尔 如果错误,那么不要跟踪行/行/位置.strictEntities-布尔 如果真实, 只分析 预定义 XML 实体 (单位:千美元)&, (中文(简体) ),', (中文(简体) ),>, (中文(简体) ),<,以及"(中文(简体) )unquotedAttributeValues-布尔 如果是真的,那就不用引用 属性值被允许。 默认为false何时strict没错,true否则.
方法
write - 把字节写到溪上 你不必这样
一次 一次吗 随所取故能作是念已.
close - 关闭溪流。 一旦关闭,将不再撰写数据,直到
它完成处理缓冲器,它由 end 活动.
resume - 为了优雅地处理错误, 指派一个听众到 error
活动。 然后,当错误得到处理, 你可以打电话 resume 改为
继续解析。 否则,解析器在错误中不会继续
状态.
成员
解析器对象在任何时候都会有以下成员:
line, (中文(简体) ), column, (中文(简体) ), position - 说明XML中的立场
文档.
startTagPosition - 显示当前标签的起始位置.
closed - 布尔表示解析器是否可以写入 .
如果是这样 true,然后等待时间 ready 再次写入的事件.
strict - 布尔表示解析器是不是个混蛋.
opt - 任何选择权传入建筑师.
tag - 目前的标签正在处理中.
还有一堆你可能不该碰的东西.
活动
所有的事件都以单一的论据发出. 要听事件,请指定
函数改为 on<eventname>。函数在此
解析器对象。 所支持的事件清单也在导出中
EVENTS 阵列.
当使用流界面时, 使用 EventEmiter 指定处理器
on 以正常方式运行.
error - 表明发生了坏事 错误将挂起
继续 parser.error,在解析可以继续之前必须删除。 以
听听这个事件,你可以注意那些东西。 说明:
发生这种事 多数 更严格的方式。 参数: Error。 。 。 .
text - 文字节点 辩:字行.
doctype - 那个 <!DOCTYPE 声明。 辩:道克类型字符串.
processinginstruction - 喜欢的东西 <?xml foo="blerg" ?>。参数:
对象为 name 财务报告和审定财务报表 body 成员。 未解析属性, 如
处理指令有执行依赖语义.
sgmldeclaration - 随机的SGML声明。 喜欢的东西 <!ENTITY p>
会引发这样的事件。 这是奇怪的事情支持,所以它
可能会在某个时候离开。 SAX不是用来分析SGML的,
毕竟.
opentagstart - 当标签名称可用时立即发出,
但是在遇到任何属性之前 参数:带有a的对象
name 字段和一个空 attributes 设置。 请注意,这是
与以后在 opentag 活动.
opentag - 一个开口标签。 参数: 对象 name 财务报告和审定财务报表 attributes。 。 。 .
在非限制性模式下,标签名称被大写,除非 lowercase
选项已设置。 如果 xmlns 选项已设定,然后将包含
名称空间绑定信息 ns 成员,并将有一个
local, (中文(简体) ), prefix,以及 uri 成员.
closetag - 一个关闭标记。 在松散模式下,如果标签
父关. 在严格模式下,实施完善的形态. 请注意:
自动关闭标签 closeTag 紧接着发射 openTag。 。 。 .
参数:标签名.
attribute - 一个属性节点。 参数: 对象 name 财务报告和审定财务报表 value。 。 。 .
在非限制性模式下,属性名称被大写,除非 lowercase
选项已设置。 如果 xmlns 选项,它也将包含命名空间
资料.
comment -一个评论节点 辩:注之弦.
opencdata - 一个开口的标签 <![CDATA[ 块.
cdata - 一个文本 <![CDATA[ 块。 自兹 <![CDATA[ 块可以得到
相当大,如果一个街区,这个事件可能多次开火
被分割成多个 write()s. 参数:随机的字符串
字符数据.
closecdata - 关闭标签(]]>页:1 <![CDATA[ 块.
opennamespace - 如果说 xmlns 选项已设定,然后此事件将
表示开始一个新的命名空间绑定.
closenamespace - 如果说 xmlns 选项已设定,然后此事件将
表示命名空间绑定的结束.
end - 说明封闭的溪流已经结束了.
ready - 说明溪流已重置,并准备写作
改为:.
noscript - 在非限制性模式下, <script> 标记触发 a "script"
事件,其内容不检查特殊的 xml 字符.
如果你通过了 noscript: true,然后这种行为被压制.
报告问题
如果你发现问题 最好写个失败的测试 我会永远 如果检测失败,则接受拉动请求 行为,但很难理解 你在描述什么问题 没有测试。 写试卷也是你最好的选择 找出你是否真正理解你认为你的问题 萨克斯js.