A-A+
javascript中XMLDOM和parseXML解析xml实现代码
本文章来介绍了关于javascript中XMLDOM和parseXML解析xml实现代码,有需要的同学可看看用法与参考方法,通常我们有如下的需求.
第一步:
我们可以定义一个方法(只用有人调用,就直接返回解析器),代码如下:
- 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中直接调用方法来获得解析器,代码如下:
- <script language="JavaScript">
- 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 = "<" + (prefix?(prefix+":"):"") + tagname +
- (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;
- }
- }
- </script>