我想找到一个等于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>
答案 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;