以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  如何指定一个节点作for循环,  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=34926)


--  作者:gino
--  发布时间:6/27/2006 3:17:00 PM

--  如何指定一个节点作for循环,
Dear sir,
i have a xml file like below

xml file:
<?xml version="1.0" encoding="UTF-8"?>
<COMPANY>
    <Department name='CPU'>
        <FAX>
                <FaxNo>28222222</FaxNo>
                <FaxNo>28333333</FaxNo>
        </FAX>
        <Session name='PDT'>
        <FAX>
 <FaxNo>28255555</FaxNo>
        </FAX>
        <StaffList>
 <Staff>
       <StaffName>Rcok Hsu</StaffName>
       <PhoneNo>272</PhoneNo>
 </Staff>
 <Staff>
         <StaffName>Jerry</StaffName>
       <PhoneNo>103</PhoneNo>
 </Staff>
        </StaffList>
     </Session>
     <Session name='PDT'>
         <FAX>
         <FaxNo>28258287</FaxNo>
         </FAX>
 <StaffList>
      <Staff>
          <StaffName>Harry</StaffName>
          <PhoneNo>277</PhoneNo>
      </Staff>
      <Staff>
          <StaffName>Ricky</StaffName>
          <PhoneNo>375</PhoneNo>
      </Staff>
 </StaffList>
       </Session>
  </Department>
</COMPANY>

my asp is below
<HTML>
<HEAD>
<TITLE>ASP與XML搜尋引擎</TITLE>
</HEAD>
<%
' 搜尋XML文件的節點
Function SearchResult(strSearch)
   Dim objxmlDom, ObjRootNode, DptElement, strSessName, strDptname
   Dim DptList,  FaxList, SessionList, strMessage
   Dim DptListAttrib ,DptElementAttrib
   Dim strFaxNo


   strMessage = ""
   ' 載入XML文件
   Set objxmlDom = Server.CreateObject("Microsoft.XMLDOM")
   'objxmlDom.validateOnParse = true
   objxmlDom.Load(Server.MapPath("PhoneBook2.xml"))
   Set objRootNode = objxmlDom.documentElement
   ' 搜尋所有的keywords節點
   If objRootNode.hasChildNodes() Then
      For Each DptList in objRootNode.childNodes 'AT COMPANY LEVEL INTO EACH DEPARTMENT
         DptListAttrib = DptList.attributes.getNamedItem("name").text '---get DEPARTMENT ATTRIBUTE name
         If InStr(DptListAttrib,strSearch) Then '如果搜尋的字符合 DEPARTMENT那就要顯示整個DEPARTMENT DATA
            
            For Each DptElement in DptList.childNodes  'AT department LEVEL FOR COMPANY CHILD '---FAX, SESSION
            'FAX PART
            IF DptList.selectSingleNode("FAX").hasChildNodes() Then
               strMessage = strMessage & DptElement.childNodes.length
               For i=0 to DptElement.childNodes.length
               strMessage = strMessage & DptList.firstChild.nodeName & " </BR>"
               strMessage = strMessage & "oo"
               IF FaxList.nodeName="FaxNo" then
                   strFaxNo = DptElement.selectSingleNode("FaxNo").text
                   strMessage = strMessage & strFaxNo
               End if    
               Next
            End If
            Next
         End If
      Next
   End If
   Set objxmlDom = Nothing
   SearchResult = strMessage
End Function  
%>
<BODY>
<H2>分機搜尋引擎</H2><HR>
<%
Dim strResult
' 取得搜尋的字串
strSearch = UCase(Request.QueryString("strSearch"))

//   strSearch = Request.Form("strSearch")

If strSearch <> "" Then
   strResult = SearchResult(strSearch)
End If
%>
<FORM action="PhoneBook.asp" method="POST">
  輸入搜尋字串 : <INPUT type="TEXT" name="strSearch" value=<%=strSearch%>>
  <INPUT type="SUBMIT" value="開始搜尋">
</FORM>
<HR>
<% If strResult <> "" Then %>
      <B>搜尋的結果 .... </B><BR><BR>
      <DIV><%=strResult%></DIV>
<% Else
   If strSearch <> "" Then %>
      <B>沒有任何符合的網址<%=strResult%></B><BR>
<% End If
End If %>
</BODY>
</HTML>

当我搜寻department的时候,若名字一样, 我就会进入此department然后将此部分的数据显示, 可是当我要去抓取FAX的时候,
            IF DptList.selectSingleNode("FAX").hasChildNodes() Then
               strMessage = strMessage & DptElement.childNodes.length
               For i=0 to DptElement.childNodes.length
我却无法用循环显示DEPARTMENT中的FAX NO….他竟然还会回圈到SESSION
请问各位要怎么指定回圈某一个节点呢???

谢谢各位指导啊

This picture is my structure.....



此主题相关图片如下:
按此在新窗口浏览图片

[此贴子已经被作者于2006-6-29 11:35:46编辑过]

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
54.688ms