0

This gives me an error:

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <script type="text/javascript">
            function loadXMLDoc(dname)
            {
                if (window.XMLHttpRequest)
                {
                    xhttp=new XMLHttpRequest();
                }
                else
                {
                    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xhttp.open("GET",dname,false);
                xhttp.send();
                return xhttp.responseXML;
            }

            var xmlDoc=loadXMLDoc("books.xml");

            var books = xmlDoc.getElementByTagName("title");

            for(var i = 0; i < books.length; i++){

                document.write(xmlDoc.getElementsByTagName("title")[i].childNodes[0].nodeValue + "<br />");
                document.write(xmlDoc.getElementsByTagName("author")[i].childNodes[0].nodeValue + "<br />");
                document.write(xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue + "<br />");

            }
        </script>

    </head>
    <body>
        <div>TODO write content</div>
    </body>
</html>

However if I remove the line: var books = xmlDoc.getElementByTagName("title"); and replace books.length to say '3' it works.

My XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

2 Answers 2

3

Might it just be that you left out the "s" in xmlDoc.getElementsByTagName("title")?

Sign up to request clarification or add additional context in comments.

Comments

1

Use XPath expression rather then getElementsByTagName:

var x=loadXMLDoc("books.xml");
var xml=x.responseXML;`<br/>
path="/bookstore/book/title";
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();

while (result)
{
  document.write(result.childNodes[0].nodeValue);
  document.write("<br>");
  result=nodes.iterateNext();
}

3 Comments

This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post - you can always comment on your own posts, and once you have sufficient reputation you will be able to comment on any post.
that was a suggestion.
Thanks for bringing me back to my question that's over 3 years old. Looking at how I used to code is so cringey :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.