作者tag:windows/.net web concerned CSDN 推荐tag:文件 数据 schema 内容 document xml  
 | 下一篇: 开心地走在程序路上
 Javascript+DOM访问XML文件中的数据 
1.生成XML文件。
        在ADO里,用Recordset.Save方法可以保存查询内容至指定XML文件,这样生成的文件里面有很多内容是关于数据表的属性的,即<s:Schema></s:Schema>节点内容。我们需要的是<rs:data></rs:data>节点的内容。结构大体如下:Data.xml
        <xml ...>
        <s:Schema>
                ...
        </s:Schema>
        <rs:data>
                <z:row PositionID='1001' PositionName='fdsafsd' CompanyID='1' PMID='1001' />
                <z:row PositionID='1002' PositionName='.NET Developer' CompanyID='2' PMID='1002' />
        </rs:data>
        这里的<z:row />即为一个数据行,下一步就是显示这部分内容。
2.LoadXML文件。
 <SCRIPT language=javascript>
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
var currNode;
xmlDoc.async = false;
xmlDoc.load("Data.xml");
if (xmlDoc.parseError.errorCode != 0) {//如果打开文件出错
   var myErr = xmlDoc.parseError;
   document.write("You have error " + myErr.reason);
}
else
{
 document.write("<hr size=1>");
   xmlDoc.setProperty("SelectionLanguage", "XPath");
   currNode = xmlDoc.documentElement.childNodes[1];//取得<rs:data>部分
   alert(currNode.childNodes[0].attributes[0].value);//测试结果    for(i=0;i<currNode.childNodes.length;i++) //遍历每个'数据行'
   {
  for(j=0;j<currNode.childNodes[i].attributes.length;j++)//遍历行的每个属性
  {
   document.write(currNode.childNodes[i].attributes[j].name + " : " + currNode.childNodes[i].attributes[j].value + "<BR>");
  }
document.write("<hr size=1>");
   }
}
</script>
你看看这个

解决方案 »

  1.   

    xml文件有问题吧?
    <aa attribute=101>
    <title>123456</title>
    </aa>
    <aa attribute=102>
    <title>123456</title>
    </aa>
    <aa attribute=103>
    <title>123456</title>
    </aa>
    大概是这个样子。去网上搜索相关的代码吧,读取attribute就行了
      

  2.   

    如果可以如楼上说的那样,那就简单了!
    我需要的就是:
    读取type
    因为我这是有多级的分类的,写在同一xml里~
    只是各自对应的type不同!
    想读取其中对应分类的标题~~~~~~
    大哥们有办法没?不能的话,我就只能每个type对应一个xml了!这样非常烦琐也不便于管理
      

  3.   

    我不是给了个查询xml的方法么?
      

  4.   

    火箭哥的是针对遍力的js读取xml的方法!可不是我想的那种!
    js读取xml我会~
    遍历读取我方法很多,都是从第一个开始读取的!
    我想的是读取其中任何一个而不通过attribute的方法~而是自定义的type~
      

  5.   

    项目中最后一个问题了~
    大家帮帮忙嘛!
    where 高手何在??
      

  6.   

    你的<type>节点都没结尾!
    通过js读Dom对象行不?前面借用火箭哥的
    <SCRIPT language="javascript">
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    var currNode;
    xmlDoc.async = false;
    xmlDoc.load("Data.xml");
    var title="";
    if (xmlDoc.parseError.errorCode != 0) {//如果打开文件出错
       var myErr = xmlDoc.parseError;
       document.write("You have error " + myErr.reason);
    }
    else
    {
       var types = xmlDoc.getElementsByTagName("type");
       for(var i=0; i < types.length; i++)
       {
          //debugger;
          if(types[i].text == "103")
          {
    var myTitle = types[i].nextSibling;
    title = myTitle.text;
          }
       }
    }
    alert(title);
    </SCRIPT>
      

  7.   

    谢谢,wangwei155().问题解决一半!不过能否不通过nextSibling读取下一条?而是读取指定节点:
    比如同属于<item><type>103</type>....<pic>sad.jpg</pic><title>123456</title></item>
    读取103下的pic和title节点?不一定是下一条!
      

  8.   

    详情请观看俺的博客http://www.cnblogs.com/sanshisong/archive/2006/10/09/524619.html
      

  9.   

    能否不通过nextSibling读取下一条?而是读取指定节点:
    比如同属于<item><type>103</type>....<pic>sad.jpg</pic><title>123456</title></item>
    读取103下的pic和title节点?不一定是下一条!
      

  10.   

    你这XML文件没根节点啊
    xmlDoc.selectSingleNode("/title")
      

  11.   

    还是用Dom方法,对于有<item>父节点的情况,你可以先遍历到<item>的所有子节点
    接上面给的例子,后面的代码改下:
    var brothors= types[i].parentNode.childNodes;
    for(var j=0;j<brothors.length;j++)
    {
        if(brothors[j].tagName=="title")
            title=brothors[j].text;
    }