簡體   English   中英

如何使用jQuery在變量中查找無效的未關閉XML標記?

[英]How to find invalid unclosed XML tags in a variable using jQuery?

我想在變量或文本框中找到未關閉的XML標記。

var xml = "<name>supun</name><age>23<year>1111</year>";

所以年齡沒有結束標簽,我想找到那個標簽

您可以使用以下函數來處理無效的xml,如下所示

 var xt="",h3OK=1 function checkErrorXML(x) { xt="" h3OK=1 checkXML(x) } function checkXML(n) { var l,i,nam nam=n.nodeName if (nam=="h3") { if (h3OK==0) { return; } h3OK=0 } if (nam=="#text") { xt=xt + n.nodeValue + "\\n" } l=n.childNodes.length for (i=0;i<l;i++) { checkXML(n.childNodes[i]) } } function validateXML(xml) { // code for IE if (window.ActiveXObject) { var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.loadXML(xml); if(xmlDoc.parseError.errorCode!=0) { txt="Error Code: " + xmlDoc.parseError.errorCode + "\\n"; txt=txt+"Error Reason: " + xmlDoc.parseError.reason; txt=txt+"Error Line: " + xmlDoc.parseError.line; alert(txt); } else { alert("No errors found"); } } // code for Mozilla, Firefox, Opera, etc. else if (document.implementation && document.implementation.createDocument) { var parser=new DOMParser(); var text=xml; var xmlDoc=parser.parseFromString(text,"text/xml"); if (xmlDoc.getElementsByTagName("parsererror").length>0) { checkErrorXML(xmlDoc.getElementsByTagName("parsererror")[0]); alert(xt) } else { alert("No errors found"); } } else { alert('Your browser cannot handle this script'); } } var xml="<xml><name>supun</name><age>23<year>1111</year></xml>"; validateXML(xml); 

來源: http//www.w3schools.com/dom/dom_errors.asp

我建議一個小的正則表達式黑客:

var str = "<name>supun</name><age>23<year>1111</year>";

function getInvalidTags(str)
{
    // remove text between XML tags:
    var noText = str.replace(/>[^<>]*</g, "><");
    var prev = noText;
    var next = "";
    // while something changed remove <any></any> pairs
    while (prev != (next = prev.replace(/<([^<>]*)( [^<>]*)?><\/\1>/g, "")))
        prev = next;
    return prev;
}
console.log(getInvalidTags(str));

請注意,它不支持屬性,但可以輕松擴展以支持它們。

更新 :已更新以支持屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM