解析包含类似xml语法的字符串

时间:2014-07-27 20:30:57

标签: javascript xml

我正在寻找一种方法来解析包含可以通过javascript拾取的内联元素的字符串。一个例子。

给出以下可解析字符串:

"I have a <noun length="10" />

有没有办法轻松解析这个字符串并理解该字符串中有一个名为“noun”的对象,其中包含一个值为10的length属性?

2 个答案:

答案 0 :(得分:0)

您需要确保您的字符串是格式良好的XML。在这种情况下,您需要确保存在文档元素。

如何将值包装在<doc>元素中,然后解析并查询属性值的示例:

function parseSnippet(snippet, xpathExpression) {
    var startDoc = "<doc>",
        endDoc = "</doc>",
        xml = startDoc + snippet + endDoc,
        xmlDoc;

    if (window.DOMParser) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(xml, "text/xml");
    } else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(xml);
    }
    return xmlDoc;
}
var xmlDoc = parseSnippet('I have a <noun length="10" />');
var nounLength = document.evaluate('/doc/noun/@length', 
                                   xmlDoc, 
                                   null,
                                   XPathResult.FIRST_ORDERED_NODE_TYPE, 
                                   null).singleNodeValue.textContent;

alert("length: " + nounLength);

下面是相同的概念,但是利用jQuery和parseXML()函数:

function parseSnippet(snippet) {
    var startDoc = "<doc>",
        endDoc = "</doc>",
        xml = startDoc + snippet + endDoc,
        xmlDoc = $.parseXML( xml );

    return $( xmlDoc );   
}
var $length = parseSnippet('I have a <noun length="10" />')
              .find( "noun" ).attr("length");

console.log("length: "+ $length);

答案 1 :(得分:-1)

jquery会工作吗?

var a = $(string)
undefined
a.select("noun")
[
<noun attr=​"thing">​</noun>​
]
a.select("noun").attr("attr")
"thing"