【问题标题】:Searching an XML doc for a certain element/attribute value and return that element在 XML 文档中搜索某个元素/属性值并返回该元素
【发布时间】:2014-02-15 08:12:37
【问题描述】:

所以我得到了这段代码,它从 XML(产品目录)中获取元素并将它们列在表中。我现在要做的是从该 XML 中返回只有 1 个包含所有元素的产品。例如,我想从目录中只获取我想查看的具有特定序列号的产品。

这是我的 XML 文档:

<CATALOG>
    <PRODUCT>
       <SERIAL>123ABC</SERIAL>
       <PRODNR>1234</PRODNR>
       <PRODNM>COOLER</PRODNM>
       <ACCNAME>JOHN</ACCNAME>
       <NRDOC>0001</NRDOC>
    </PRODUCT>
    <PRODUCT>
       <SERIAL>234BCD</SERIAL>
       <PRODNR>2345</PRODNR>
       <PRODNM>MOUSEPAD</PRODNM>
       <ACCNAME>STEVE</ACCNAME>
       <NRDOC>0002</NRDOC>
    </PRODUCT>
    <PRODUCT>
       <SERIAL>345CDE</SERIAL>
       <PRODNR>3456</PRODNR>
       <PRODNM>KEYBOARD</PRODNM>
       <ACCNAME>WILLIAM</ACCNAME>
       <NRDOC>0003</NRDOC>
    </PRODUCT>
    <PRODUCT>
       <SERIAL>456DEF</SERIAL>
       <PRODNR>4567</PRODNR>
       <PRODNM>MOUSE</PRODNM>
       <ACCNAME>MARCUS</ACCNAME>
       <NRDOC>0004</NRDOC>
    </PRODUCT>
</CATALOG>

这是我目前的代码:

function loadXMLDoc(url) {
var serialNumber = document.getElementById('searchBox').value;
var xmlhttp;
var txt, xx, x, i;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        txt = "<table border='1'><tr><th>Product number</th><th>Product name</th><th>Account name</th><th>Document number</th></tr>";
        x = xmlhttp.responseXML.documentElement.getElementsByTagName("PRODUCT");
        for (i = 0; i < x.length; i++) {
            txt = txt + "<tr>";
            xx = x[i].getElementsByTagName("PRODNM");
            {
                try {
                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                }
                catch (er) {
                    txt = txt + "<td>&nbsp;</td>";
                }
            }
            xx = x[i].getElementsByTagName("PRODNR");
            {
                try {
                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                }
                catch (er) {
                    txt = txt + "<td>&nbsp;</td>";
                }
            }
            xx = x[i].getElementsByTagName("ACCNAME");
            {
                try {
                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                }
                catch (er) {
                    txt = txt + "<td>&nbsp;</td>";
                }
            }
            xx = x[i].getElementsByTagName("NRDOC");
            {
                try {
                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                }
                catch (er) {
                    txt = txt + "<td>&nbsp;</td>";
                }
            }
            txt = txt + "</tr>";
        }
        txt = txt + "</table>";
        document.getElementById('showTable').innerHTML = txt;
    }
}
xmlhttp.open("GET", url, true);
xmlhttp.send();

}

【问题讨论】:

    标签: javascript xml search xmlhttprequest


    【解决方案1】:

    我会使用 XPath 来选择必要的 PRODUCT 节点:

    var path = '//SERIAL[text()="' + serialNumber + '"]/..';
    var x = document.evaluate(path, xmlhttp.responseXML.documentElement, null, 9, null).singleNodeValue;
    

    注意:(document.selectNodes(xpath) 用于 IE)

    演示:http://plnkr.co/edit/9hp6kM5OT8LEYrTCrCqN?p=preview

    或者您可以简单地遍历所有 PRODUCT 节点并过滤具有搜索 ID 的节点。

    【讨论】:

    • 我在demo中看到了html代码。问题是我正在尝试使用搜索字段。我得到了这个 html 代码&lt;input type="text" id="searchBox" value="Enter serial number here" onFocus="this.value=''"/&gt; &lt;input type="button" id="search" value="Search" onclick="loadXMLDoc('prod_catalog.xml')"/&gt;,然后我使用这个 javascript 代码来获取变量:var serialNumber = document.getElementById('searchBox').value; 我的问题是..我如何使用从搜索框中获取的序列号从 XML 文档中检索特定产品?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多