在XML文件中查找标记

时间:2016-02-13 23:25:59

标签: javascript html xml

我想找到一个等于player_name的特殊标签,然后使用下一个标签的值(注释).XML文件的结构是:

<Result>
    <Name>Player1</Name>
    <job>0<job>                 
    <Age>10</Age>                   
 </Result>
 <Notepad>
    <Name>Player1</Name>
    <Notes>example notes....<Notes>
 </Notepad> 

我正在使用以下代码,但当我使用alert检查时,它不会返回“x.getElementsByTagName("PlayerName").childNodes[i].nodeValue”的任何内容。

<script>
function myFunction(xml,player_name) {
  var x, i, xmlDoc, notes;
  xmlDoc = xml.responseXML;
  x = xmlDoc.getElementsByTagName("Notepad")
  
 for(i=0;i<x.length;i++){
     if (x.getElementsByTagName("Name").childNodes[i].nodeValue == player_name) {
        notes = x.getElementsByTagName("Notes").childNodes[i].nodeValue;
	  
	document.getElementById("something").innerHTML = notes;}
     }    	
 }
</script>

2 个答案:

答案 0 :(得分:1)

对于你的情况,xpath更好。我为你的目的写了这个函数:

/**
 * This function assumes xml document
 * and player name as a arguments and
 * returns notes for this player if
 * this player exists false otherwise.
 *
 * @author Georgi Naumov
 * gonaumov@gmail.com for contacts and
 * suggestions.
 */
function getPlayerNotes(xmlDoc, playerName) {
    var xpathQuery = [
        '//Notepad[Name[text()=\'',
        playerName,
        '\']]/Notes'
    ].join(''), recordsCount;

    recordsCount = xmlDoc.evaluate('count(' + xpathQuery + ')', xmlDoc, null, XPathResult.NUMBER_TYPE, null);

    if (recordsCount.numberValue === 0) {
        return false;
    }

    return (xmlDoc.evaluate(xpathQuery, xmlDoc, null, XPathResult.STRING_TYPE, null)).stringValue;
}

在这里您可以看到演示如何使用该功能:

http://gonaumov.github.io/javaScriptXpath/

输入xml也必须有效。检查示例输入字符串。

答案 1 :(得分:0)

通常,具有给定xml内容的上述代码将引发错误:

  

未捕获的TypeError:x.getElementsByTagName不是函数

我测试了它。那是因为 Element.getElementsByTagName() 方法会返回一个实时的 HTMLCollection 元素。要处理此类集合中的某个节点,您需要直接指定节点位置。

example notes....

这有效,并在致电myFunction(xhttp.responseXML, 'Player1');

时给我select users.full_name from users;