【问题标题】:How do i get the contents of a certain title in xml with javascript?如何使用 javascript 获取 xml 中某个标题的内容?
【发布时间】:2012-02-28 19:15:05
【问题描述】:

我在我的 url 中设置了一个变量,我在我的下一页中得到了这个变量,这个变量是我的 xml 中一篇文章的标题。我试图获取这篇文章的其余内容,但不幸失败了……xml的布局是。

    <title>
      <artist>
      Nirvana
      </artist>
      <description>
      Nirvana in concert
      </description>
      <date>
      18/05/1987
      </date>
   </title>
    <title>
    <artist>
    led zeppelin
    </artist>
    <description>
    led in concert
    </description>
    <date>
    18/05/1987
    </date>
    </title>

当我搜索 18/05/1987 时,我想显示 nirvana 和 led + 描述,所以对应节点的全部内容。

编辑我已经尝试了代码,但似乎只得到 1 个答案...我很新,所以我不明白为什么在检查迭代时我没有得到更多答案

    xmlDoc=loadXMLDoc("data.xml");
var hash = getUrlVars(); 
var date = hash['date'];
var nodeList = xmlDoc.getElementsByTagName("article");

for (var i = 0; i < nodeList.length; i++) {
    var titleNode = nodeList[i];
    if(titleNode.getElementsByTagName("urltext")[i].nodeValue = date){
        document.write("<div style='width:450px;'>")
        document.write("<p>"+titleNode.getElementsByTagName("title")[i].childNodes[0].nodeValue+"</p>");
        document.write("<p>"+titleNode.getElementsByTagName("description")[i].childNodes[0].nodeValue+"</p>");
        document.write("<p>"+titleNode.getElementsByTagName("urltext")[i].childNodes[0].nodeValue+"</p>");
        document.write("</div>")
    }
}

提前打个招呼

【问题讨论】:

标签: javascript xml


【解决方案1】:

这是我用来创建 XML DOM 文档的一个小 JavaScript 函数...

function GetXMLDoc(xml) {
    var xmlDoc;
    if (window.DOMParser) {
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(xml, "text/xml");
    }
    else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xml);
    }

    return xmlDoc;
}

然后您可以像这样使用它来获取标题,例如...

var xmlDoc = GetXMLDoc(XML_String_Input);
var title = xmlDoc.getElementsByTagName("title")[0].nodeValue;

编辑:当您似乎想要对 XML 执行搜索时,您可以执行以下操作...

var nodeList = xmlDoc.getElementsByTagName("title");
var resultNodes = [];

for (var i = 0; i < nodeList.length; i++) {
    var titleNode = nodeList[i];
    if(titleNode.getElementsByTagName("artist")[0].nodeValue == "Nirvana"){
        //match found for artist "Nirvana"
        resultNodes.push(titleNode);
    }
}

//here you will now have a list (`resultNodes`) of "title" nodes that matched the search (i.e. artist == "Nirvana")
//there is enough sample code above for you to be able to process each of the seach results and gets the values for the various other properties like "data" for example

See here for more information on XML DOM function and properties

【讨论】:

  • 问题不在于我无法阅读内容,我必须从那里获取特定内容(在我的情况下,我点击第一页中的日期,并且 xml 中具有该日期的所有内容都应该显示在下一个,所以在 sql 中粗略地说,它将是 select * from xml where date=18/05/1987) 问题是我的服务器上没有 php/sql,所以我必须使用 xml 作为小型数据库跨度>
  • @ToonVanDooren:那么您能否提供一个更完整的 xml 示例?说 2 个标题和一个根集合节点(编辑您的问题)
  • 完成...谢谢你告诉我我应该让我的问题更清楚,我得到了补充,所以有时很难解释自己,有些人只是 -1 而没有说出原因
  • @ToonVanDooren:好的,看看我的编辑,希望对您的需求有所帮助
  • @ToonVanDooren:因为您的 for 循环(其中定义了 i)正在循环通过 nodeList 集合,而 titleNode = nodeList[i] 代码正在获取每个索引处的节点。因此,当您在 nodeTitle 上调用 .getElementsByTagName("artist") 时,您只会获得与单个 nodeTitle 匹配的元素,其中只有一个(即索引 0)。希望这是有道理的;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
相关资源
最近更新 更多