我想知道jQuery在解析XML时提供了什么样的信息。 Here is an example
整体上存在错误:
错误:无效的XML:这根本不是有效的XML。
或者您可以使用e.message
无效的XML:根本不是有效的XML。
但还有其他方法吗?例如,它是否可能只获得" Invald XML"位?我已经谷歌搜索了很多年,但无法找到任何相关文档。
此外,jQuery是否会生成这些错误回退,或者jQuery是否只是利用了浏览器的XML处理?
答案 0 :(得分:0)
您的问题的答案包含在jQuery源代码中:
jQuery.parseXML = function( data ) {
var xml, tmp;
if ( !data || typeof data !== "string" ) {
return null;
}
try {
if ( window.DOMParser ) { // Standard
tmp = new DOMParser();
xml = tmp.parseFromString( data, "text/xml" );
} else { // IE
xml = new ActiveXObject( "Microsoft.XMLDOM" );
xml.async = "false";
xml.loadXML( data );
}
} catch( e ) {
xml = undefined;
}
if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
};
是的,它正在使用浏览器方法和
不,您无法在不重写方法的情况下隔离特定问题。
答案 1 :(得分:0)
尝试
(function($) {
jQuery._parseXML = function ( data ) {
var xml, tmp, e, msg;
if ( !data || typeof data !== "string" ) {
return null;
}
try {
if ( window.DOMParser ) { // Standard
tmp = new DOMParser();
xml = tmp.parseFromString( data, "text/xml" );
} else { // IE
xml = new ActiveXObject( "Microsoft.XMLDOM" );
xml.async = "false";
xml.loadXML( data );
}
} finally {
e = $(xml).children().contents().filter(function(i, el) {
return $(el).is("parsererror")
});
// if `parsererror` element `length` > 0
// return `msg` , else return `undefined`
msg = !!e.length
// define error `msg` here
? [ e.text()
, e.next()[0].previousSibling.nodeValue
, e.next()[0].outerHTML
, e.next()[0]
]
: undefined;
}
// if `msg` !== undefined , return `msg` , else return `xml`
return msg !== undefined ? msg : xml
}
}(jQuery));
(function($) {
jQuery._parseXML = function ( data ) {
var xml, tmp, e, msg;
if ( !data || typeof data !== "string" ) {
return null;
}
try {
if ( window.DOMParser ) { // Standard
tmp = new DOMParser();
xml = tmp.parseFromString( data, "text/xml" );
} else { // IE
xml = new ActiveXObject( "Microsoft.XMLDOM" );
xml.async = "false";
xml.loadXML( data );
}
} finally {
e = $(xml).children().contents().filter(function(i, el) {
return $(el).is("parsererror")
});
msg = !!e.length
// define error `msg` here
? [ e.text()
, e.next()[0].previousSibling.nodeValue
, e.next()[0].outerHTML
, e.next()[0]
]
: undefined;
}
// if ( !xml || !xml.documentElement
// || xml.getElementsByTagName( "parsererror" ).length ) {
// jQuery.error( "Invalid XML: " + data );
// }
return msg !== undefined ? msg : xml
}
}(jQuery));
console.log(
$._parseXML("<node>abc123</node>")
, $._parseXML("<node>abc123<node>")
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>