如何使用Node.js解析HTML/XML文档
How to parse HTML/XML documents with Node.js?
我有一个包含generatePNG
函数的editor.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Diagram</title>
<script type="text/javascript" src="lib/jquery-1.8.1.js"></script>
// <!-- I use many resources -->
<script></script>
<script>
function generatePNG (oViewer) {
var oImageOptions = {
includeDecoratorLayers: false,
replaceImageURL: true
};
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
var sFileName = "diagram" + h.toString() + m.toString() + s.toString() + ".png";
var sResultBlob = oViewer.generateImageBlob(function(sBlob) {
b = 64;
var reader = new window.FileReader();
reader.readAsDataURL(sBlob);
reader.onloadend = function() {
base64data = reader.result;
var image = document.createElement('img');
image.setAttribute("id", "GraphImage");
image.src = base64data;
document.body.appendChild(image);
}
}, "image/png", oImageOptions);
return sResult;
}
</script>
</head>
<body >
<div id="diagramContainer"></div>
</body>
</html>
我想使用Node.js访问DOM并获得image.src
。我发现我可以使用cheerio或jsdom。
我从这个开始:
var cheerio = require('cheerio'),
$ = cheerio.load('editor.html');
但是我不知道如何访问和获取image.src
。
问题是,将html文件加载到cheerio(或任何其他节点模块)将不会像浏览器那样处理html。资产(如样式表、图像和javascript)将不会像在浏览器中那样被加载和/或处理。
虽然node.js和现代网络浏览器都有相同(或相似)的javascript引擎,但浏览器会添加许多附加内容,如window
、DOM
(document
)等。Node.js没有这些概念,所以既没有window.FileReader
也没有document.createElement
。
如果图像完全是在没有用户交互的情况下创建的(您的代码示例"神奇地"接收到sBlob
参数,该参数似乎是类似data:<type>;<encoding>,<data>
的字符串),那么您可以在服务器上使用所谓的无头浏览器,PhantomJS现在似乎最受欢迎。再说一遍,如果创建sBlob
不需要用户交互,那么最好使用纯node.js解决方案,例如,我如何在node中解析数据URL?。
如果创建sBlob
需要某种用户交互,并且您需要将其存储在服务器上,那么您可以使用与前面提到的几乎相同的解决方案,只需使用Ajax或websocket将sBlob
发送到服务器,将sBlob
处理为图像,并(可选)返回查找图像的URL。
相关文章:
- 如何将childNodes用于XML文档
- 加载的XML文档为null(Javascript)
- 如何将 :empty 选择器应用于 XML 文档
- 无法使用JavaScript在网页上加载XML文档
- 在 javascript 中创建 xml 文档显示错误
- 是否可以检测IE何时忽略xml文档中的空白文本节点
- 在分析 XML 文档后循环访问关联数组
- jQuery 重新加载 xml 文档需要关闭浏览器
- 在jQuery的XML文档中选择和操作DOM中的元素
- 转义 XML 文档中的特殊字符
- 使用jQuery解析XML文档,有没有有效的方法
- 可以't使用getElementsByTagName从Javascript中的XML文档中检索节点
- 在javascript中检索XML文档的所有值
- 如何用Javascript克隆XML文档
- 如何使用Node.js解析HTML/XML文档
- 使用XML文档中的内容更新链接文本
- clonoNode()Dom方法无法克隆给定的Xml文档对象
- 用于解析xml文档的Javascript代码
- 在服务器端编辑XML文档
- javascript来搜索XML文档中的属性