Double XML DOM getAttribute()方法+条件

时间:2014-01-22 09:45:15

标签: javascript html xml dom

我有一个XML文件,我想从使用JavaScript中提取一些属性,但我只希望它返回如果来自父节点的属性与我在前一个脚本中设置的全局变量匹配时出现的属性HTML页面的一部分。

我的XML文件位于

之下
<?xml version="1.0" encoding="UTF-8"?>
<directory name="weeks">
<directory name="week42">
<file name="one.pdf"/>
<file name="two.pdf"/>
<file name="three.pdf"/>
</directory>
<directory name="week43">
<file name="four.pdf"/>
<file name="five.pdf"/>
</directory>
</directory>

这个想法是列出文件节点的'name'属性,但前提是目录父节点的'name'属性=在早期脚本中设置的全局变量'week'。周变量将根据日期而变化(XML文件将随着周数的添加和删除而更新),但是对于此示例,我们可以假设它已设置为 week42

到目前为止,我的代码如下。它会写入所有文件节点中的所有“名称”属性,因此我的结果是

one.pdf
two.pdf
three.pdf
four.pdf
five.pdf

-

function loadXMLDoc(weekslinks)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET","weeksdirlist.xml",false);
xhttp.send();
return xhttp.responseXML;
}  

xmlDoc=loadXMLDoc("weeksdirlist.xml");
x=xmlDoc.getElementsByTagName("file");

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

var filename = x[i].getAttributeNode("name").nodeValue; //the nodefile is the filename
if (filename != "Thumbs.db")     
{
document.write(filename);
}
}

我想要的是我的输出只返回'name'属性,如果父名称属性=我的全局变量是week42。因此我的输出应该是

one.pdf
two.pdf
three.pdf

任何建议都非常感谢。 谢谢, 梯

1 个答案:

答案 0 :(得分:1)

我们走了......

    <!DOCTYPE html>
<html>
<body>
    <script>
        text = "<directory name='weeks'><directory name='week42'>";
        text = text + "<file name='one.pdf'/><file name='two.pdf'/>";
        text = text + "<file name='three.pdf'/></directory>";
        text = text + "<directory name='week43'><file name='four.pdf'/>";
        text = text + "<file name='five.pdf'/></directory></directory>";
        if (window.DOMParser) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(text, "text/xml");
        } else // Internet Explorer
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(text);
        }
        var x = xmlDoc.getElementsByTagName('directory');

        var constant = 'week43';
        for (var i =0; i < x.length; i++) {
            var attrs = x[i].attributes;
            var k = attrs.getNamedItem("name").nodeValue;
            if (constant == k) {
                if (x[i].childNodes) {
                    document.write(k);
                    for ( var j = 0; j < x[i].childNodes.length; j++) {
                        var detail = x[i].childNodes[j];
                        var lattr = detail.attributes.getNamedItem("name").nodeValue;
                        document.write("<br>");
                        document.write(lattr);
                    }
                }
            }

        }


    </script>
</body>
</html>

输出将是第43周 four.pdf five.pdf