我正在创建一个Windows 8 JavaScript应用程序,我需要转换一个像这样的字符串:
<p>
blah blah blah
</p>
<div>
<p>
random dom stuff
</p>
</div>
进入XML DOM对象,因此我可以使用DOM方法遍历它(即getElementByID()
)。
我尝试了两种方式
//retrieve text to process
var content = xml.querySelector("api > parse > text").textContent;
//1
var contentXML = new DOMParser().parseFromString(content, "text/xml");
//2
var newContentXML = new ActiveXObject("Microsoft.XMLDOM");
newContentXM.async = false;
newContentXM.loadXML(content);
两者都失败了。 Only one root element is allowed.
排名第1,Automation server can't create object. Can't load the ActiveX plug-in that has the class ID '{2933BF90-7B36-11D2-B20E-00C04F983E60}'. Applications can't load ActiveX controls.
排名第2
我看过的每个地方都说#2是你应该在IE中做的,我假设W8 JS应用程序使用与IE相同的JavaScript引擎。
如何将文本转换为XML DOM对象?
答案 0 :(得分:2)
DOMParser很好,错误很准确。 parseFromString返回文档的实例,但是您的文本没有定义单个文档根,它是两个的串联:段落和div。
以下内容可行:
<div>
<p>
blah blah blah
</p>
<div>
<p>
random dom stuff
</p>
</div>
</div>
顺便使用原始字符串
答案 1 :(得分:0)
IE是一种痛苦,并且以更复杂的方式做事。虽然DOMParser
适用于大多数浏览器,但在IE中,您需要创建一个ActiveX对象MSXML2.DOMDocument.6.0
,MSXML2.DOMDocument.3.0
或MSXML2.DOMDocument
- 首先支持这些对象。以下是一些检测使用内容的代码:
var xml, tmp;
try {
if (isIE) // add your IE detection here
{
var versions = ["MSXML2.DOMDocument.6.0",
"MSXML2.DOMDocument.3.0",
"MSXML2.DOMDocument"];
for (var i = 0; i < 3; i++){
try {
xml = new ActiveXObject(versions[i]);
if (xml)
break;
} catch (ex){
xml = null;
}
}
if (xml)
{
xml.async = "false";
xml.loadXML(str);
}
}
else {
tmp = new DOMParser();
xml = tmp.parseFromString(str, "text/xml");
}
} catch(e) {
xml = null;
}