javascript中XMLDOM和parseXML解析xml实现代码

作者:袖梨 2022-11-14

通常我们有如下的需求:

第一步:


我们可以定义一个方法:(只用有人调用,就直接返回解析器)

代码如下 复制代码
function parseXML(file){
try //Internet Explorer---ie浏览器的解析器创建方式如下:
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}
catch (e) {
try //Firefox, Mozilla, Opera, etc. 火狐等浏览器的创建方式。
{
xmlDoc = document.implementation.createDocument("", "", null);
}
catch (e) {
alert(e.message);
return; //如果创建不成功,就直接返回,不往下走。
}
}
xmlDoc.async = false;
xmlDoc.load(file);
return xmlDoc; //返回创建好的解析器,传给调用者。
}

第二步:

在js中直接调用方法来获得解析器:

代码如下 复制代码

window.onload = function(){

var xmlDoc = parseXML("file.xml");

//调用上面我们定义的方法,给方法一个参数,参数就是你要解析的xml文件,得到这个文件的对象,也就相当于把xml文件包装成了一个document。

}


parseXML参考


//XML 解析

代码如下 复制代码

XML.newDocument = function(rootTagName, namespaceURL) {
if (!rootTagName) rootTagName = "";
if (!namespaceURL) namespaceURL = "";

if (document.implementation && document.implementation.createDocument) {
// This is the W3C standard way to do it
return document.implementation.createDocument(namespaceURL,
rootTagName, null);
}
else { // This is the IE way to do it
// Create an empty document as an ActiveX object
// If there is no root element, this is all we have to do
var doc = new ActiveXObject("MSXML2.DOMDocument");

// If there is a root tag, initialize the document
if (rootTagName) {
// Look for a namespace prefix
var prefix = "";
var tagname = rootTagName;
var p = rootTagName.indexOf(':');
if (p != -1) {
prefix = rootTagName.substring(0, p);
tagname = rootTagName.substring(p+1);
}

// If we have a namespace, we must have a namespace prefix
// If we don't have a namespace, we discard any prefix
if (namespaceURL) {
if (!prefix) prefix = "a0"; // What Firefox uses
}
else prefix = "";

// Create the root element (with optional namespace) as a
// string of text
var text = " (namespaceURL
?(" xmlns:" + prefix + '="' + namespaceURL +'"')
:"") +
"/>";
// And parse that text into the empty document
doc.loadXML(text);
}
return doc;
}
};

function loadFromUrl(url) {
// Create a new document with the previously defined function
var xmldoc = XML.newDocument( );
xmldoc.async = false; // We want to load synchronously
xmldoc.load(url); // Load and parse
return xmldoc; // Return the document
}

function xmlToString(xmlDoc)
{
var xmlString;
try
{
if (navigator.appName == "Microsoft Internet Explorer")
{
xmlString = xmlDoc.xml;
}
else
{
xmlString = new XMLSerializer().serializeToString( xmlDoc );
}
}
catch (e)
{
xmlString = null;
}
return xmlString;
}

function stringToXMLDoc(str)
{
var xmlDoc = null;
try
{
var xmlDOMObj = new ActiveXObject("Microsoft.XMLDOM");
xmlDOMObj.async = false;
xmlDOMObj.loadXML(str);
xmlDoc = xmlDOMObj;
}
catch (e)
{
try
{
var domParser = new DOMParser;
xmlDoc = domParser.parseFromString(str, 'text/xml');
}
catch (e)
{
xmlDoc = null;
}
}
return xmlDoc;

}

function stringToXMLDoc(str) {
if (typeof DOMParser != "undefined") {
// Mozilla, Firefox, and related browsers
return (new DOMParser( )).parseFromString(text, "application/xml");
}
else if (typeof ActiveXObject != "undefined") {
// Internet Explorer.
var doc = XML.newDocument( ); // Create an empty document
doc.loadXML(text); // Parse text into it
return doc; // Return it
}
else {
// As a last resort, try loading the document from a data: URL
// This is supposed to work in Safari. Thanks to Manos Batsis and
// his Sarissa library (sarissa.sourceforge.net) for this technique.
var url = "data:text/xml;charset=utf-8," + encodeURIComponent(text);
var request = new XMLHttpRequest( );
request.open("GET", url, false);
request.send(null);
return request.responseXML;
}
}


相关文章

精彩推荐