Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript通过标记搜索XML并获取同级节点_Javascript_Html_Xml - Fatal编程技术网

Javascript通过标记搜索XML并获取同级节点

Javascript通过标记搜索XML并获取同级节点,javascript,html,xml,Javascript,Html,Xml,我不熟悉javascript和xml,在搜索xml文件中的值和显示相关节点值时遇到问题。我有记事本和IE 8要用,我一直在努力学习。我能够拼凑出一些有效的东西,但却无法让代码发挥作用;但是,它只是返回了我使用getElementsByTagName搜索的标记 我正在处理由其他人生成的xml,我无法控制xml,因此对于每个xml,我甚至不知道如何称呼它们,我想称它们为记录集、节点族?它可能没有所有的字段。 示例:书籍->标题、作者、年份和价格 而另一个是 示例:书籍->标题、作者、年份 所以我想按

我不熟悉javascript和xml,在搜索xml文件中的值和显示相关节点值时遇到问题。我有记事本和IE 8要用,我一直在努力学习。我能够拼凑出一些有效的东西,但却无法让代码发挥作用;但是,它只是返回了我使用getElementsByTagName搜索的标记

我正在处理由其他人生成的xml,我无法控制xml,因此对于每个xml,我甚至不知道如何称呼它们,我想称它们为记录集、节点族?它可能没有所有的字段。 示例:书籍->标题、作者、年份和价格 而另一个是 示例:书籍->标题、作者、年份 所以我想按标题搜索并返回相关字段。我想看看是否可以使用我现有的工具,没有jsquery、Ajax、XPath。。。。 我检查了w3学校,它有我认为我需要的东西,但无法让搜索功能(从堆栈溢出链接)工作

尝试添加我正在使用的最新代码;但是,我的大脑已经死了,似乎无法很好地显示出来

XML=“test.XML”


142450
  • B
  • G 可用 2014-11-14T00:00:00 网状物 144230
  • F
  • T 可用 2014-11-14T00:00:00 内部 144240
  • F
  • P NA
    HTML=“new_test.htm”

    
    在Microsoft浏览器中读取XML
    var-xmlDoc;
    函数loadxml()
    {
    xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
    xmlDoc.async=false;
    xmlDoc.onreadystatechange=readXML;
    load(“test.xml”);
    }
    函数readXML()
    {
    if(xmlDoc.readyState==4)
    {
    var-foundElements=[];
    arrayOfElements=xmlDoc.getElementsByTagName(“XML_x0020_导出”);
    
    对于(i=0;i好的,我在这方面已经解决了几个问题。首先,您永远不会真正尝试在本地加载xml文件……您将从web服务或类似的方式获取xml文件,然后您将对其进行操作。这在堆栈溢出方面已经得到了多次回答,我已将其从您的复杂情况中删除。因此,我已将您的xml文件转换为字符串,并使用新行将其连接起来

    第二,我想我应该浏览代码行,边走边解释

    var foundElements = []; 
    arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
    
    这并没有改变,我们实例化了数组并用xml元素加载它

    for (i=0;i<arrayOfElements.length;i++)
    
    这是我们为每个元素实例化输出字符串

    for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
    
    我们只想在节点类型为1的节点上操作。这些节点是我们的属性节点,包含我们真正关心的数据

    output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
    
    然后,我们将字符串与子节点名称(title)和值(value)连接起来

    document.write(输出);
    文件。写(“
    ”);
    一旦我们到达元素中的最后一个节点,我们希望写入html,并循环到下一个元素

    这一切对我来说都很有用,它应该可以帮助您了解如何导航xml文档。您似乎没有使用的一件事是Javascript的内置调试。如果没有它,我不确定Javascript编程会有多复杂,这在我编写此回复时至关重要

    最终代码:

    <!DOCTYPE html>
     <head>
      <title>Read XML in Microsoft Browsers</title>
      <script type="text/javascript">
        var xmlDoc;
        function loadxml()
        {
          parser=new DOMParser();
          xmlDoc=parser.parseFromString(  "<dataroot> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>142450</ID>  \n" +
                                          "<LI>B</LI>  \n" +
                                          "<FI>G</FI>  \n" +
                                          "<Status>Available</Status>  \n" +
                                          "<Status-Date>2014-11-14T00:00:00</Status-Date>  \n" +
                                          "<Status-Loc>Web</Status-Loc>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>144230</ID>  \n" +
                                          "<LI>F</LI>  \n" +
                                          "<FI>T</FI>  \n" +
                                          "<Status>Available</Status>  \n" +
                                          "<Status-Date>2014-11-14T00:00:00</Status-Date>  \n" +
                                          "<Status-Loc>In House</Status-Loc>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>144240</ID>  \n" +
                                          "<LI>F</LI>  \n" +
                                          "<FI>P</FI>  \n" +
                                          "<Status>NA</Status>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "</dataroot>",
                                        "text/xml");
        }
        function readXML()
        {
            var foundElements = []; 
            arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
            for (i=0;i<arrayOfElements.length;i++)
                {
                var output = "";
                for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
                    if (arrayOfElements[i].childNodes[x].nodeType == 1) {    
                        output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
                    }
                }
                document.write(output);
                document.write("<br>");
            }
        }
      </script>
     </head>
     <body onload="loadxml(); readXML()">
     </body>
    </html>
    
    
    在Microsoft浏览器中读取XML
    var-xmlDoc;
    函数loadxml()
    {
    parser=新的DOMParser();
    xmlDoc=parser.parseFromString(“\n”+
    “\n”+
    “142450\n”+
    “
  • B
  • \n”+ “G\n”+ “可用\n”+ “2014-11-14T00:00:00\n”+ “Web\n”+ “\n”+ “\n”+ “144230\n”+ “
  • F
  • \n”+ “T\n”+ “可用\n”+ “2014-11-14T00:00:00\n”+ “内部\n”+ “\n”+ “\n”+ “144240\n”+ “
  • F
  • \n”+ “P\n”+ “不适用\n”+ “\n”+ "", “文本/xml”); } 函数readXML() { var-foundElements=[]; arrayOfElements=xmlDoc.getElementsByTagName(“XML_x0020_导出”);
    对于(i=0;我感谢您的回复。我似乎无法让它工作。我已经用我目前正在处理的代码和xml的一部分以及我想做的事情更新了我的问题,希望这能让它更清楚。我已经根据您更新的问题/代码进行了更新…请让我知道它是否工作!
    for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
    
    if (arrayOfElements[i].childNodes[x].nodeType == 1) {    
    
    output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
    
    document.write(output);
    document.write("<br>");
    
    <!DOCTYPE html>
     <head>
      <title>Read XML in Microsoft Browsers</title>
      <script type="text/javascript">
        var xmlDoc;
        function loadxml()
        {
          parser=new DOMParser();
          xmlDoc=parser.parseFromString(  "<dataroot> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>142450</ID>  \n" +
                                          "<LI>B</LI>  \n" +
                                          "<FI>G</FI>  \n" +
                                          "<Status>Available</Status>  \n" +
                                          "<Status-Date>2014-11-14T00:00:00</Status-Date>  \n" +
                                          "<Status-Loc>Web</Status-Loc>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>144230</ID>  \n" +
                                          "<LI>F</LI>  \n" +
                                          "<FI>T</FI>  \n" +
                                          "<Status>Available</Status>  \n" +
                                          "<Status-Date>2014-11-14T00:00:00</Status-Date>  \n" +
                                          "<Status-Loc>In House</Status-Loc>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "<XML_x0020_Export> \n" +
                                          "<ID>144240</ID>  \n" +
                                          "<LI>F</LI>  \n" +
                                          "<FI>P</FI>  \n" +
                                          "<Status>NA</Status>  \n" +
                                          "</XML_x0020_Export> \n" +
                                          "</dataroot>",
                                        "text/xml");
        }
        function readXML()
        {
            var foundElements = []; 
            arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
            for (i=0;i<arrayOfElements.length;i++)
                {
                var output = "";
                for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
                    if (arrayOfElements[i].childNodes[x].nodeType == 1) {    
                        output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
                    }
                }
                document.write(output);
                document.write("<br>");
            }
        }
      </script>
     </head>
     <body onload="loadxml(); readXML()">
     </body>
    </html>