鉴于此代码,
<style>
table,th,td {
border : 1px solid black;
border-collapse: collapse;
}
th,td {
padding: 5px;
}
</style>
<body>
<form>
<input type="text" id="word" value=""/>
<button type="button" onclick="loadDoc()">Retrieve data</button>
<br>
</form>
<br><br>
<table id="demo"></table>
<script type="text/javascript">// <![CDATA[
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
myFunction(xhttp);
}
};
xhttp.open("GET", "URL" + $('#word').val(), true);
xhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Japanese</th><th>Pronunciation</th><th>English</th></tr>";
var x = xmlDoc.getElementsByTagName("json");
for (i = 0; i <x.length; i++) {
table += "<tr><td>" +
x[i].getElementsByTagName("japanese")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("pronunciation")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("english")[0].childNodes[0].nodeValue +
"</td>" + " " + "</tr>";
}
document.getElementById("demo").innerHTML = table;
}
// ]]></script>
如果没有值,我怎么能跳过“发音”标签?
更具体一点,我的XML文件有不同的标签 - “日语”(一个单词或汉字),“发音”(如何读取单词,在平假名中,只有当它是汉字时才有值)和“英语”(这个词的意思)。
当“发音”标签缺少值时,当前代码不起作用,这意味着没有发音的每个单词都会导致网站不显示任何内容。
XML文件:
<json> //This entry has pronunciation
<japanese>原爆</japanese>
<pos>n</pos>
<pronunciation>げんばく</pronunciation>
<english>(abbr) (See 原子爆弾) atomic bomb A-bomb</english>
</json>
<json> //This entry does not have pronunciation as it is not needed
<japanese>ダム</japanese>
<pos>n</pos>
<english>dam/(adj-f)</english>
<english>dumb</english>
</json>
谢谢!
答案 0 :(得分:0)
从您的示例数据中,发音元素在不需要时完全省略。所以getElementsByTagName(&#34;发音&#34;)返回undefined,因此,你不能从中得到[0]。
您可以测试返回的内容并做出相应的响应,如下所示:
var pron = getElementsByTagName("pronunciation");
if (pron) { table += pron[0].childNodes[0].nodeValue; }
这假设您将一个长的作业拆分为&#39; table&#39;,分成不同的部分。通常,您可能会发现将其分解为如下函数很有用:
function getOptionalContentAsTD(ename) {
var el = getElementsByTagName(ename);
var txt = "";
if (el) { txt = el[0].childNodes[0].nodeValue; }
return("<td>" + txt + "</td>");
}
我没有对此进行测试,因此可能存在拼写错误,但它提出了这个想法。
希望有所帮助。