以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  在ASP中操纵xml的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=6416)


--  作者:锋划雪月
--  发布时间:4/3/2004 11:27:00 PM

--  在ASP中操纵xml的问题
呵呵,好几天没来了。我正在做以前提到的那个动态调查问卷程序,但现在有个问题,我发现自己的xml文档结构设计的不太合理,在ASP中操纵起来有点复杂。文档如下:
<?xml version="1.0" encoding="gb2312"?>
<detail>
<test>
  <question>
    <questionid>1</questionid>
    <qtype>single</qtype>
    <qname>你比较喜欢哪位女明星?</qname>
    <qpoint>10</qpoint>
    <itemlist>
      <itemid>1</itemid>
      <itemname>张曼玉</itemname>
      <itemid>2</itemid>
      <itemname>林青霞</itemname>
      <itemid>3</itemid>
      <itemname>张柏芝</itemname>
      <itemid>4</itemid>
      <itemname>钟郦缇</itemname>
      <itemid>5</itemid>
      <itemname></itemname>
    </itemlist>
  </question>
  <question>
     <questionid>2</questionid>
     <qtype>multi</qtype>
     <qname>你喜欢刘德华吗?</qname>
     <qpoint>10</qpoint>
     <itemlist>
       <itemid>1</itemid>
       <itemname>从没听说过</itemname>
       <itemid>2</itemid>
       <itemname>上高中时喜欢,现在感觉他已经老了</itemname>
       <itemid>3</itemid>
       <itemname>一直比较喜欢</itemname>
       <itemid>4</itemid>
       <itemname>收集了许多他的资料,是他的铁杆Fans</itemname>
       <itemid>5</itemid>
       <itemname>非常赞赏他的敬业精神</itemname>
     </itemlist>
  </question>
</test>
</detail>
其中,questionid表示问题的编号,qtype表示问题的类型,如为single型即为单选,如为mutil即为多选,如为show即为文本描述。qname表示问题的内容,qpoint为问题的权值。itemid为答案的编号,itemname为答案的内容。当然还要有一项是qvalue记录问题的最终选项,这项是在填写调查表时添加进去的。
正如大家看到的,文档中嵌套了许多内容,在添加“问题”的各子节点内容时还要想办法添加“答案”对应的子节点内容,而后者整体在前者之中。然而如果要进行节点的删除操作,替换操作呢,定位的问题实在是有点复杂。我仿照这在论坛上下载的一个实例写了一些代码,仍不能够很好的实现各种操作,如下:
Set objquestion = objXmlDoc.createElement("question")
    objXmlDoc.documentElement.appendChild objquestion
    
    ' 创建各个子节点
    '-----------------------------------------------------
    Set objNode = objXmlDoc.createElement("questionid")
    objNode.Text = strid
    objquestion.appendChild objNode
    
    Set objNode = objXmlDoc.createElement("qname")
    objNode.Text = strname
    objquestion.appendChild objNode
    
    Set objNode = objXmlDoc.createElement("qtype")
    objNode.Text = strtype
    objquestion.appendChild objNode
    ......
    '----------------------------------------------------
    ' 从XML文件中删除数据
    ' 需要首先设置Id
   Public Function DeleteFromXml(objXmlDoc)
    Dim objNodeList, objNode
    
    ClearError
    
    If objXmlDoc Is Nothing Then
      DeleteFromXml = False
      AddErr "Dom对象为空值"
      Exit Function
    End If
    
    If CStr(strId) = "-1" Then
      DeleteFromXml = False
      AddErr "未正确设置问题的ID属性"
      Exit Function
    End If
    
    Set objNodeList = objXmlDoc.getElementsByTagName("question")    
    If objNodeList.length - strId < 0 Then
      DeleteFromXml = False
      AddErr "未找到相应的问题"
      Set objNodeList = Nothing
      Exit Function
    End If
    
    On Error Resume Next
    Set objNode = objXmlDoc.documentElement.removeChild(objNodeList(strId-1))
    If objNode Is Nothing Then
      DeleteFromXml = False
      AddErr "删除问题失败"
      Set objNodeList = Nothing
      Exit Function
    Else
      objXmlDoc.save Server.MapPath(XMLFILE)'保存删除后的信息
    End If
    Set objNode = Nothing
    Set objNodeList = Nothing
    
    If Err.Number = 0 Then
      DeleteFromXml = True
    Else
      DeleteFromXml = False
      AddErr Err.Description
    End If
  End Function
  

所以我很想听听大家的意见,如果您有好的想法,请告诉我,谢谢!


--  作者:小鞋子
--  发布时间:4/4/2004 12:12:00 AM

--  
不管复杂.呵..建议是不是可以用到属性啊..
--  作者:锋划雪月
--  发布时间:4/7/2004 11:09:00 PM

--  
谢谢!可是,我如何用脚本实现在节点树中添加新节点的同时加入其属性呢?
--  作者:锋划雪月
--  发布时间:4/8/2004 11:39:00 AM

--  
版主,管理员,您们也说句话啊!


--  作者:admin
--  发布时间:4/8/2004 1:02:00 PM

--  
新建一个节点,为他添加属性,,在把这个节点加入,就可以了。。
--  作者:锋划雪月
--  发布时间:4/8/2004 5:23:00 PM

--  
大哥,你说的我知道哦,关键是如何通过dom对象在节点里加入属性,您告诉我写属性的关键字就成了.
--  作者:锋划雪月
--  发布时间:4/8/2004 9:20:00 PM

--  
那大姐,你说的我知道哦,关键是如何通过dom对象在节点里加入属性,您告诉我写属性的关键字就成了.
--  作者:33341112
--  发布时间:12/20/2005 11:26:00 AM

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