所以这里是交易:我试图从一个已经存在的 NodeList 中检索一个 NodeList 对象。这是一个简化的 XML 示例:
<products>
<category>
<name>Category A</name>
<product>
<code>1</code>
<name>Product 1 Category A</name>
<price>10.0</price>
</product>
<product>
<code>2</code>
<name>Product 2 Category A</name>
<price>20.0</price>
</product>
</category>
<category>
<name>Category B</name>
<product>
<code>3</code>
<name>Product 1 Category B</name>
<price>5.0</price>
</product>
...
</category>
</products>
如您所见,标签名称出现了两次,一次是类别的子节点,另一次是产品的子节点。我希望只检索产品名称。由于我无法从 XML 文件中读取,而是将其作为字符串接收,所以这是我的解析函数:
function parseXML(xmlString) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
var products = xmlDoc.getElementsByTagName("product");
var names = products.tags("name"); //Here's my problem
for(var i = 0; i < names.length; i++){
var element = names[i];
var name = element.firstChild;
$('#div_products').append(name.data + "<br>");
}
$('#div_main').html($('#div_products').html());
}
这是我用作参考的内容:http: //help.dottoro.com/ljtrjxbf.php。但是,使用 nodeListObject.tags("tag") 会产生以下错误:
processMessage failed: Stack: TypeError: Object #<a NodeList> has no method 'tags'
我尝试了不同的方法,但没有任何效果。甚至
var names = products["name"];
返回“未定义”,这在任何情况下都对我不起作用,因为文档说除了 IE 之外,它只会返回第一个节点和 A)我正在使用 Android/Cordova 和 B)没有属性“名称”无论如何都在节点中。
那么我该如何解决呢?我想我可以尝试从产品 NodeList 创建一个新的 XMLDocument 对象,但我没有研究它,因为它必须有一个更简单的方法来解决这个问题。