Domino中通过ls代理操作物力路径下的xml文件

这个博客展示了如何在Lotus Domino中通过`ls`代理操作物理路径下的XML文件,包括创建、插入、修改和删除XML节点。示例代码详细说明了如何利用`msxml2.domdocument`对象进行XML文档的操作,如设置属性、插入和删除节点,并用XPath进行节点选择。

----------------------------------创建xml----------------------------------------------------

Sub Initialize
 On Error Goto a 
 Dim session As New NotesSession
 
 Path = "D:\Test.xml"    '创建路径
 
 Dim ObjDom As Variant
 Set ObjDom = createObject("msxml2.domdocument")
 ObjDom.async = False
 ObjDom.resolveExternals = False
 Call ObjDom.Setproperty("SelectionLanguage","XPath")  '解析Xpath语言,区分大小写
 
 Set RootNode = ObjDom.CreateProcessingInstruction("xml","version='1.0' encoding='GBK'") '创建xml标签
 Call ObjDOM.Appendchild(RootNode)
 
 '创建根节点
 
 Set PNode = ObjDOM.Createelement("father")   
 Call PNode.Setattribute("ID","007")         '给PNode节点添加属性
 Call PNode.Setattribute("Name","sz")          '给PNode节点添加属性
 Call ObjDOM.Appendchild(PNode)
 
 '创建子节点
 Set CNode1 = ObjDom.Createelement("a1")
 Call CNode1.Setattribute("value","sz")
 
 Set CNode2 = ObjDom.Createelement("a2")
 Call CNode2.Setattribute("value","wy")
 
 Set CNode3 = ObjDom.Createelement("a1")
 Call CNode3.Setattribute("value","wsp")
 
 Call PNode.Appendchild(CNode1)
 Call PNode.Appendchild(CNode2)
 Call PNode.Appendchild(CNode3)
 
 '创建子节点
 
 Set NameNode1 = ObjDom.Createelement("Name")
 NameNode1.text = "特种兵"     '节点值
 Set NameNode2 = ObjDom.Createelement("Name")
 NameNode2.text = "小冶"
 Set NameNode3 = ObjDom.Createelement("Name")
 NameNode3.text = "鹏少"
 
 Set IdNode1 = ObjDom.Createelement("ID")
 IdNode1.text = "001"
 Set IdNode2 = ObjDom.Createelement("ID")
 IdNode2.text = "002"
 Set IdNode3 = ObjDom.Createelement("ID")
 IdNode3.text = "003"
 
 '--------在指定的子节点之前插入节点--------
 Set SetNode = ObjDom.Createelement("SetName")
 CallSetNode.Setattribute("color","red") '插入节点属性
 SetNode.text = "特种兵007"    '插入节点值
 
 Call CNode1.Parentnode.Insertbefore(SetNode,Null) '在父节点的位置
 Call CNode1.Insertbefore(SetNode,Null)
 '-------------------------------------------
 
 Call CNode1.Appendchild(NameNode1)
 Call CNode1.Appendchild(IdNode1)
 
 Call CNode2.Appendchild(NameNode2)
 Call CNode2.Appendchild(IdNode2)
 
 Call CNode3.Appendchild(NameNode3)
 Call CNode3.Appendchild(IdNode3)
 
 
 Call ObjDom.save(Path)
 
 Exit Sub
a:
 Msgbox "错误在代理agent_CreateXml的第" & Erl & "行:" & Error
 
End Sub

----------------------------------在已有xml中插入节点----------------------------------------------------

Sub Initialize
 On Error Goto a
 
 Dim session As New NotesSession 
 Path = "D:\Test.xml"  
 
 Dim ObjDom As Variant
 Set ObjDom = createObject("msxml2.domdocument")
 ObjDom.async = False
 ObjDom.resolveExternals = False
 Call ObjDom.Setproperty("SelectionLanguage","XPath")  '解析Xpath语言,区分大小写
 
 If  ObjDom.load(Path) Then '判断是否读取到指定路径下的xml文件
  
  Set SNode = ObjDOM.SelectSingleNode("//father")  
  '创建子节点
  Set PNode = ObjDOM.Createelement("b") 
  Call PNode.Setattribute("value","呵呵")
  Call SNode.Appendchild(PNode)
  Set CNode1 = ObjDom.Createelement("b1")
  
  CNode1.text = "111"
  Call PNode.Appendchild(CNode1)
  
  Set CNode2 = ObjDom.Createelement("b2")
  CNode2.text = "222"
  Call PNode.Appendchild(CNode2)
  
 '--------在指定的子节点之前插入节点--------
  Set SetNode = ObjDom.Createelement("SetName")
  Call SetNode.Setattribute("color","green") '插入节点属性
  SetNode.text = "侦察兵"
  Call CNode1.Parentnode.Insertbefore(SetNode,Null) '在父节点的位置
 '-------------------------------------------
  
  Call ObjDom.save(Path)
 End If
 
 Exit Sub
a:
 Msgbox "错误在代理agent_InsertXml的第" & Erl & "行:" & Error
 
End Sub

----------------------------------修改已有xml中的节点----------------------------------------------------

 Sub Initialize
 On Error Goto a 
 Dim session As New NotesSession
 Path = "D:\Test.xml" 
 
 Dim ObjDom As Variant
 Set ObjDom = createObject("msxml2.domdocument")
 ObjDom.async = False
 ObjDom.resolveExternals = False
 
 If ObjDom.load(Path) Then
  
   '修改节点值
  Set AimNode = ObjDOM.Selectsinglenode("/father/a1/Name")    
  AimNode.text = "谢文东"
  
  '修改节点属性
  Set EditNode = ObjDOM.Selectsinglenode("/father/a1")
  Call EditNode.setAttribute("val3ue","80980") '不能为空
  
  Call ObjDom.save(Path)
 End If
 
 
 Exit Sub
a:
 Msgbox "错误在代理agent_DeleteXml的第" & Erl & "行:" & Error
 
End Sub

----------------------------------删除已有xml中的节点----------------------------------------------------

Sub Initialize
 On Error Goto a 
 Dim session As New NotesSession
 Path = "D:\Test.xml" 
 
 Dim ObjDom As Variant
 Set ObjDom = createObject("msxml2.domdocument")
 ObjDom.async = False
 ObjDom.resolveExternals = False
 Call ObjDom.Setproperty("SelectionLanguage","XPath")  '解析Xpath语言,区分大小写
 
 If ObjDom.load(Path) Then   
  
  '删除节点及节点值
  
  'Set AimNode = ObjDOM.Selectsinglenode("/father/a1")         '选中结点
  'Call  AimNode.Parentnode.Removechild(AimNode)    '删除选中结点及其所有子结点
  
  'Set AimNode = ObjDOM.Selectsinglenode("/father/a1[@value='wsp']")    '选中结点(按照属性)
  'Call  AimNode.Parentnode.Removechild(AimNode)    '删除选中结点及其所有子结点
  
  'Set AimNode = ObjDOM.Selectsinglenode("/father/a1[1]")       '选中结点(按照数组顺序从0开始)
  'Call  AimNode.parentnode.Removechild(AimNode)    '删除选中结点及其所有子结点  
  
  '删除节点属性
  Set DelNode = ObjDOM.Selectsinglenode("/father/a2")
  Call DelNode.removeAttribute("value")
  
  Call ObjDom.save(Path)
 End If
 
 Exit Sub
a:
 Msgbox "错误在代理agent_DeleteXml的第" & Erl & "行:" & Error
 
End Sub

----------------------------------查询已有xml中的节点----------------------------------------------------

Sub Initialize
 On Error Goto a 
 Dim session As New NotesSession
 Path = "D:\Test.xml"  
 
 Dim ObjDom As Variant
 Set ObjDom = createObject("msxml2.domdocument")
 ObjDom.async = False
 ObjDom.resolveExternals = False
 Call ObjDom.Setproperty("SelectionLanguage","XPath")  '解析Xpath语言,区分大小写
 
 'ObjDom.load(Path)      Load指定路径下的XML文件
 'ObjDom.loadxml(doc.F_RtfXml)     Load 文档中的域值
 
 If ObjDom.load(Path) Then
  
  'Set ANode = ObjDOM.SelectSingleNode("") 查询单个节点  
  'Set ANode = ObjDom.SelectNodes("")  查询多个节点  
  
  Set ANode = ObjDOM.Selectnodes("/A/a1[ID='001']/Name")
  Msgbox ANode(0).text  
%REM 
  '选取属于 A 子元素的最后一个 a1 元素。
  Set ANode = ObjDOM.Selectsinglenode("/A/a1[last()-1]") 
  Msgbox ANode.text
  
  '选取所有属性为value的
  Set DNode = ObjDOM.Selectnodes("//@value")
  For e = 0 To DNode.length-1
   Msgbox DNode(e).text    'value值
  Next 
  '选取所有节点中的Name节点
  Set CNode = ObjDOM.Selectnodes("//Name")
  For k = 0 To CNode.length-1
   Msgbox CNode(k).text 'Name节点值
  Next
  Set ANode = ObjDOM.Selectnodes("/A/a1")  
  For i = 0 To  ANode.length-1
   Msgbox ANode(i).text
  Next 
  
  '选取属于 A 子元素的倒数第二个 a1 元素。
  Set ANode = ObjDOM.Selectsinglenode("/A/a1[last()-1]") 
  Msgbox ANode.text
  Set ANode = ObjDOM.Selectnodes("/A/a1[ID='001']/Name")  
%END REM   
 End If 
 
 Exit Sub
a:
 Msgbox "错误在代理agent_selectXml的第" & Erl & "行:" & Error
 
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值