开帖纪念,dxpcom终于可以使用了.
找了好半天,才知道怎么使用mozilla xpcom进行HTML的DOM解析.
解析使用的组件是"@mozilla.org/xmlextras/domparser;1",可以解析HTML和XML.解析使用的接口是nsIDOMParser.
代码如下,保存时要注意为UTF-8格式,不然无法用DMD编译.
import mozilla.xpcom.nsXPCOM;
import mozilla.xpcom.nsIDOMParser;
import mozilla.xpcom.nsIComponentManager;
import mozilla.xpcom.nsIDOMDocument;
import mozilla.xpcom.nsIDOMHTMLDocument;
import mozilla.xpcom.nsISupports;
import mozilla.dxpcom.StringAPI;
import mozilla.dxpcom.QueryInterface;
import std.string;
import std.stdio;
void main(char[][] args)
{
//定义xpcom组件管理器接口
nsIComponentManager componentManager;
nsresult result;
//定义一个临时使用的空串
AString tStr=new AString();
//初始化xpcom环境
result = NS_InitXPCOM2(null, null, null);
assert(result==0);
//得到xpcom组件管理端接口
result = NS_GetComponentManager(&componentManager);
assert(result==0);
//定义DOM解析器接口
nsIDOMParser DOMParser;
//使用xpcom组件管理端,从指定的组件中得到指定的接口
result = componentManager.CreateInstanceByContractID("@mozilla.org/xmlextras/domparser;1",null,
&nsIDOMParser.IID,cast(void**)&DOMParser);
assert(result==0);
//定义待解析的HTML文本串
PRUnichar HtmlStr[]=r"<html><head><title>test_title</title></head><body><al>test</al></body></html>"w;
//定义DOM文档对象接口
nsIDOMDocument DOMDoc;
//使用DOM解析接口解析html文本串,得到DOM文档对象接口
result=DOMParser.ParseFromString(cast(PRUnichar*)HtmlStr,"application/xhtml+xml",&DOMDoc);
assert(result==0);
DOMParser.Release();
/*
//得到文档的类型
nsIDOMDocumentType DocType;
result=DOMDoc.GetName(&DocType);
assert(result==0);
result=DocType.GetInternalSubset(cast(nsAString*)tStr);
assert(result==0);
writefln("Doc Type=: %s", tStr.GetString());*/
//定义DOM节点列表接口
nsIDOMNodeList NodeList;
//定义待解析得到的节点的名字
AString TagName = new AString("title"w);
//解析得到节点列表
result=DOMDoc.GetElementsByTagName(cast(nsAString*)TagName,&NodeList);
assert(result==0);
//定义DOM节点接口
nsIDOMNode Node;
uint Len=0;
//判断节点列表是否为空
result=NodeList.GetLength(&Len);
assert(result==0&&Len!=0);
//从节点列表中得到一个节点
result=NodeList.Item(0,&Node);
assert(result==0);
NodeList.Release();
//得到这个节点的名字
result=Node.GetNodeName(cast(nsAString*)tStr);
assert(result==0);
//显示这个节点的名字
wchar wStr[]=tStr.GetString();
Len=wStr.length;
writefln("Node Name =: %s", wStr);
//再定义一个节点接口,用于表示子节点
nsIDOMNode cNode;
//得到这个节点的子节点
result=Node.GetFirstChild(&cNode);
assert(result==0);
//得到子节点的值
result=cNode.GetNodeValue(cast(nsAString*)tStr);
assert(result==0);
cNode.Release();
//显示这个子节点的值
wStr=tStr.GetString();
writefln("Node Value=: %s", wStr);
//释放所有用过的接口
Node.Release();
DOMDoc.Release();
componentManager.Release();
//关闭xpcom环境
result = NS_ShutdownXPCOM(null);
assert(result==0);
}
看上去好像很繁琐,但等D的异常风格包装完事后,会好看的多!
再次对qiezi的工作表示敬意!为我们提供了在D中使用xpcom的可能!
:)
其他不明的相关事宜,请大家讨论.
这次修改,加入了Release调用.
最终的运行结果是:
Node Name =: title
Node Value=: test_title
分享到:
相关推荐
解析javadom解析javadom解析javadom解析javadom解析
dom和sax解析的区别,dom的概念,sax的概念
一直以来使用php解析html文档树都是一个难题。Simple HTML DOM parser 帮我们很好地解决了这个问题。可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5+以上版本)。
java学习笔记——使用DOM解析XML和使用SAX解析XML
DOM解析XML文件例子DOM解析XML文件例子DOM解析XML文件例子
用Dom方式解析Html的组件
在Java平台中如何来使用DOM解析xml文件,
使用dom4j 和本地dom 解析xml 文件
ppt中详细介绍了DOM解析器的使用及其应用
Android使用Dom方式解析XML,虽然xml文件太大时不建议用dom方式解析,但是如果文件比较小,也不失为一种选择。项目中xml放在assets文件夹下,view绑定使用butterknife
html-dom-parser 在服务器(Node.js)和客户端(浏览器)上均可使用HTML到DOM解析器: HTMLDOMParser(string[, options])解析器将HTML字符串转换为描述DOM树JavaScript对象。例子const parse = require ( '...
小巧的dom解析库,php下的,解析html很方便,支持jQuery
php dom 解析的封装,有例子 simple_html_dom
DOM解析XML 创建XML
android上使用DOM解析XML的简单示例。android4.0以上。
以一个实例来说明DOM解析XML文件的方法与过程。
包括android代码实例以及个人对Dom解析xml文件的总结文档。
android为我们提供了多种解析方式,DOM解析,代码操作简单,一直为解析xml文件的一个不错的选择
DOM解析可加载XML文件 对XML文件进行解析 获取结点信息 更新结点信息 及其属性等信息