Javascript从标记数据中获取值

时间:2015-01-15 10:37:19

标签: javascript

我正在尝试从以下类型的字符串数组中获取字符串数据,其中Tag等于“UNSORTED”

"<UNSORTED><NAME_NO>999</NAME_NO></UNSORTED> <OTHER ID="075">OTHER</OTHER>"


"<UNSORTED><LASTNAME_NO>999</LASTNAME_NO></UNSORTED> <UNSORTED><TOWN_NO>1000</TOWN_NO></UNSORTED>"

在第一个例子中我想提取999

在第二个例子中我想提取999和1000

知道如何在Javascript中执行此操作吗?

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式,例如

var name = x.match(/<name_no>(\d+)<\/name_no>/i);
var town = y.match(/<town_no>(\d+)<\/town_no>/i);

Example

答案 1 :(得分:0)

您可以尝试正则表达式:

var captured = str.match(<UNSORTED>[^\d]*(\d*)<\/)

演示:https://regex101.com/r/cT9tD6/1

答案 2 :(得分:0)

由于这是XML,您可以使用document.implementationXPath来使用内存中的文档:

&#13;
&#13;
var str = '<UNSORTED><LASTNAME_NO>999</LASTNAME_NO></UNSORTED> <UNSORTED><TOWN_NO>1000</TOWN_NO></UNSORTED>';

// create a document in memory
var doc = document.implementation.createDocument('','');

// create a dummy node to store str in and add to our document
var root = doc.createElement('root');
root.innerHTML = str;
doc.appendChild(root);

// run xpath to find all the children of <UNSORTED> nodes
var unsorteds = doc.evaluate( '//UNSORTED/*', doc, null, XPathResult.ANY_TYPE, null );

// iterate through the matches and build results
var res, results = [];
while (res = unsorteds.iterateNext()) {
    // optionally ingore blank tags
    if(res.textContent.trim().length > 0) {
        // add the textContent of the node to the results array
        results.push(res.textContent);
    }
}

// log results
document.getElementById('result').innerHTML = results.join('\n');
&#13;
<textarea id="result" rows="5" cols="30"></textarea>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以通过匹配UNSORTED_NO结尾的任何孩子来完成此操作。这样,您可以拥有任何标签名称:

var results = [];
$("UNSORTED").children().filter(function(){
    return (/.+_NO/.test(this.tagName));
}).each(function(){
    results.push($(this).text());
});

console.log(results); // ["999", "999", "1000"]