使用javascript读取XML文件
问题描述:
我的XML文件格式如下。使用javascript读取XML文件
<markers>
<marker>
<type></type>
<title></title>
<address></address>
<latitude></latitude>
<longitude></longitude>
<marker>
<marker>
<type></type>
<title></title>
<address></address>
<latitude></latitude>
<longitude></longitude>
<marker>
</markers>
请指教我如何阅读所有“标记”元素。 我需要获得“标记”
感谢
答
的所有子元素的值,如果从网络服务器得到这个,看看jQuery。您可以使用Ajax load function加载它,并使用Selectors选择所需的节点或文本。
如果您不想在http环境中执行此操作或避免使用jQuery,请详细解释。
答
下面的代码会将任何XMLObject或字符串转换为本机JavaScript对象。然后,您可以在对象上行走以提取您想要的任何值。
/**
* Tries to convert a given XML data to a native JavaScript object by traversing the DOM tree.
* If a string is given, it first tries to create an XMLDomElement from the given string.
*
* @param {XMLDomElement|String} source The XML string or the XMLDomElement prefreably which containts the necessary data for the object.
* @param {Boolean} [includeRoot] Whether the "required" main container node should be a part of the resultant object or not.
* @return {Object} The native JavaScript object which is contructed from the given XML data or false if any error occured.
*/
Object.fromXML = function(source, includeRoot) {
if(typeof source == 'string')
{
try
{
if (window.DOMParser)
source = (new DOMParser()).parseFromString(source, "application/xml");
else if(window.ActiveXObject)
{
var xmlObject = new ActiveXObject("Microsoft.XMLDOM");
xmlObject.async = false;
xmlObject.loadXML(source);
source = xmlObject;
xmlObject = undefined;
}
else
throw new Error("Cannot find an XML parser!");
}
catch(error)
{
return false;
}
}
var result = {};
if(source.nodeType == 9)
source = source.firstChild;
if(!includeRoot)
source = source.firstChild;
while(source) {
if(source.childNodes.length) {
if(source.tagName in result) {
if(result[source.tagName].constructor != Array)
result[source.tagName] = [result[source.tagName]];
result[source.tagName].push(Object.fromXML(source));
}
else
result[source.tagName] = Object.fromXML(source);
} else if(source.tagName)
result[source.tagName] = source.nodeValue;
else if(!source.nextSibling) {
if(source.nodeValue.clean() != "") {
result = source.nodeValue.clean();
}
}
source = source.nextSibling;
}
return result;
};
String.prototype.clean = function() {
var self = this;
return this.replace(/(\r\n|\n|\r)/gm, "").replace(/^\s+|\s+$/g, "");
}
答
你可以这样做来阅读你的节点。你
也可以找到一些解释在本页面http://www.compoc.com/tuts/
<script type="text/javascript">
var markers = null;
$(document).ready(function() {
$.get("File.xml", {}, function (xml){
$('marker',xml).each(function(i){
markers = $(this);
});
});
});
</script>
答
您可以使用下面的脚本读取上面的XML的孩子。它将与IE和Mozila Firefox一起工作。
<script type="text/javascript">
function readXml(xmlFile){
var xmlDoc;
if(typeof window.DOMParser != "undefined") {
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",xmlFile,false);
if (xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType('text/xml');
}
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
}
else{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load(xmlFile);
}
var tagObj=xmlDoc.getElementsByTagName("marker");
var typeValue = tagObj[0].getElementsByTagName("type")[0].childNodes[0].nodeValue;
var titleValue = tagObj[0].getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>
我只是需要解析和获取这种格式的xml文件的数据。 – Avinash 2009-07-29 10:16:08