2014-10-28 30 views
2

我有一个XML有效载荷如下传统的ASP循环通过XML

<tsResponse> 
<sites> 
    <site id="site-id" name="site1-name" contentUrl="site1-content-url" /> 
    <projects> 
    <project id="project1-id" name="project1-name"/> 
    <project id="project2-id" name="project2-name"/> 
    </projects> 
    </site> 
    <site id="site2-id" name="site2-name" contentUrl="site2-content-url" /> 
    <projects> 
    <project id="project3-id" name="project3-name"/> 
    <project id="project4-id" name="project4-name"/> 
    </projects> 
    </site> 
</sites> 
</tsResponse> 

我可以通过每个站点循环,收集每个站点ID,名称和的contentURL,我有以下

Set oXML = Server.CreateObject("Microsoft.XMLDOM") 
    oXML.LoadXML(postResponse) ' sXML is a variable containing the content of your XML file 

    For Each oNode In oXML.SelectNodes("/tsResponse/sites/site") 
     sID = oNode.GetAttribute("id") 
     sName = oNode.GetAttribute("name") 
     sContentURL = oNode.GetAttribute("contentUrl") 
    Next 
    Set oXML = Nothing 

但是,如何获取每个站点中的每个项目ID和名称?我现在需要另一个For循环还是效率太低?如何循环访问特定属性= X?

UPDATE

For Each oNode In oXML.SelectNodes("/tsResponse/sites/site") 
    sID = oNode.GetAttribute("id") 
    sName = oNode.GetAttribute("name") 
    sContentURL = oNode.GetAttribute("contentUrl") 
    Response.write("<h2>"&sName&"/"&sID&"/"&sContentURL&"</h2>") 
    For Each oNode In oXML.SelectNodes("/tsResponse/sites/site[@id='"&sID&"']/projects/project") 
    pID = oNode.GetAttribute("id") 
    pName = oNode.GetAttribute("name") 
    Response.write("<h3>"&pID&"/"&pName&"</h3>") 
    Next 
Next 
Set oXML = Nothing 

在第二For loop我得到

更改oNode到oNode2和它的作品!

+0

这是否工作?您在'For'循环中缺少'SelectNodes'方法中的'projects'节点... – Paul 2014-10-28 09:38:21

+0

这可以获取网站,但我想要网站,然后是每个网站的所有项目。修改问题 – pee2pee 2014-10-28 09:39:28

回答

1
For Each oNode In oXML.SelectNodes("/tsResponse/sites/site") 
    sID = oNode.GetAttribute("id") 
    sName = oNode.GetAttribute("name") 
    sContentURL = oNode.GetAttribute("contentUrl") 
    Response.write("<h2>"&sName&"/"&sID&"/"&sContentURL&"</h2>") 
    For Each oNode2 In oXML.SelectNodes("/tsResponse/sites/site[@id='"&sID&"']/projects/project") 
    pID = oNode2.GetAttribute("id") 
    pName = oNode2.GetAttribute("name") 
    Response.write("<h3>"&pID&"/"&pName&"</h3>") 
    Next 
Next 
Set oXML = Nothing 
+2

您不能重复使用'oNode'它已经是一个循环控制变量,给它一个不同的名称。 – Lankymart 2014-10-28 09:50:43

+0

复制/粘贴错误代码 - 修复! – pee2pee 2014-10-28 09:59:31