使用Javascript向后循环XML

时间:2012-09-06 23:35:26

标签: javascript xml loops xpath

这是关于堆栈溢出的第一个问题,我希望你们能帮助我。

这是我的xml

<?xml version="1.0"?>
<RecentPhotoUploads>
<PHOTO><SOURCE>6171.jpg</SOURCE></PHOTO>
<PHOTO><SOURCE>6173.jpg</SOURCE></PHOTO>
<PHOTO><SOURCE>6895.jpg</SOURCE></PHOTO>
<PHOTO><SOURCE>Tulips.jpg</SOURCE></PHOTO>
</RecentPhotoUploads>

这是我的javascript代码

    var xml=loadXMLDoc("../upload.xml");
    var source="/RecentPhotoUploads/PHOTO/SOURCE"

    var nodes=xml.evaluate(source, xml, null, XPathResult.ANY_TYPE, null);
    var result=nodes.iterateNext();


                while (result)
                {
                document.write("<h2>" + result.childNodes[0].nodeValue + "</h2>");
                document.write("<a href='../pics/" + result.childNodes[0].nodeValue + "</a>");
                result=nodes.iterateNext();
                }

我如何向后循环这个xpathresult?

3 个答案:

答案 0 :(得分:2)

为什么你会向后导航?你可以向后打印......

var xml=loadXMLDoc("../upload.xml");
var source="/RecentPhotoUploads/PHOTO/SOURCE"

var nodes=xml.evaluate(source, xml, null, XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();

var buffer = "";
while (result) {
    buffer = "<h2>" + result.childNodes[0].nodeValue + "</h2>"
           + "<a href='../pics/" + result.childNodes[0].nodeValue + "'>"
           + result.childNodes[0].nodeValue + "</a>"
           + buffer;
    result=nodes.iterateNext();
}
document.write(buffer);

不使用documentFragment和类似的现代工具;)

答案 1 :(得分:0)

这篇文章展示了一种排序和迭代的方法:

http://blogs.msdn.com/b/kaevans/archive/2006/04/17/577456.aspx

答案 2 :(得分:0)

首先更改XPathResult的设置。您需要一个有序的快照类型。 iterateNext()将无效,因为它没有数字键。

var result = document.evaluate(source, xml, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

然后像这样循环。

for (var i = result.snapshotLength - 1; i >= 0; i--){
    document.write("<h2>" + result.snapshotItem(i).textContent + "</h2>");
    document.write("<a href='../pics/" + result.snapshotItem(i).textContent + "'>" 
    + result.snapshotItem(i).textContent + "</a>");

}

PS:你错过了'&gt;'在<a>标记的代码中。不确定你的目标是什么,所以我猜了一下。