标题:关于VB6处理xml的问题~各位爷来看下吧~
只看楼主
qq190169573
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-17
结帖率:100%
已结贴  问题点数:20 回复次数:6 
关于VB6处理xml的问题~各位爷来看下吧~
我想对xml进行处理
对xml中rec节点下
所有节点的x值乘以2
现在我遇到的问题是
同一层级的我可以理解
但是多层的我就不会了
求大家指点下~
程序代码:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element folder="activity">
        <rec x="0" y="0">
            <sprite x="1,2"/>
            <sprite x="20"/>
            <sprite key="allActivity" t="rec" x="30">
                <sprite key="ever1" n="everyActivity" t="rec" x="2,4,6,8">
                    <sprite key="boxty" n="boxty" x="3"/>
                    <sprite key="iconActivity" n="iconActivity" statelist="0,1,2,3" t="si" x="3"/>
                    <sprite key="culeMC" n="cube64" t="cmc" fps="24" x="3"/>
                    <sprite key="shbei" n="shbei" x="3"/>
                </sprite>
                <sprite key="ever2" n="boxvity" x="2"/>
            </sprite>
            <sprite key="hehe" n="hehe" statelist="0,1,2,3" x="15" />
        </rec>
    </element>
</root>

这是需要处理的xml
我希望涉及到x的地方,无论层级有多深~ 都将x的值乘以2.
如果x有多个值以“,”隔开的话,也要乘以2~~~~~

下面是我的一些代码,
太不完善了
无法达到我的效果
求大神拯救阿...
程序代码:
[color=#0000FF]Private Sub Command1_Click()
Dim Dom As New DOMDocument
Dom.async = False
Dim x As IXMLDOMNode
Dim node As IXMLDOMNode
Dim arr
Dim brr

'加载xml
Add = "E:\ts.xml"
Dom.Load Add
Set node = Dom.selectSingleNode("root").selectSingleNode("element").selectSingleNode("rec")
For Each x In node.childNodes
     '获取限定值
     xvalue = x.Attributes.getNamedItem("x").Text
    
     '判断如果x存在多个值,将值x2
     If InStr(xvalue, ",") Then
        arr = Split(xvlaue, ",")
        For i = LBound(arr) To UBound(arr)
            brr = arr(i) * 2
            x.Attributes.getNamedItem("x").Text = brr(i)
        Next
     Else
        '输出双倍的x
        '并保存
        x.Attributes.getNamedItem("x").Text = xvalue * 2
        Dom.save (Add)
     End If
Next
Set Dom = Nothing
MsgBox "双倍执行完毕"
End Sub
.


[/color]
搜索更多相关主题的帖子: element folder 
2013-11-17 17:07
qq190169573
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-17
得分:0 
..搞了一天了
没想明白
2013-11-17 17:08
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:10 
程序代码:
Option Explicit

Private Sub Command1_Click()
    Dim xmlDoc As New DOMDocument
    xmlDoc.async = False
    Dim tNode As IXMLDOMNode
    Dim xmlFN As String
   
    '加载xml
    xmlFN = "E:\ts.xml"
    xmlDoc.Load xmlFN
    Set tNode = xmlDoc.selectSingleNode("root").selectSingleNode("element").selectSingleNode("rec")
    TraversalNode tNode
    xmlDoc.save (xmlFN)
    Set xmlDoc = Nothing
End Sub

Private Sub TraversalNode(tNode As Object)
    Dim tmpNode As IXMLDOMNode 'IXMLDOMNode Object
    For Each tmpNode In tNode.childNodes
        If Not tmpNode.firstChild Is Nothing Then TraversalNode tmpNode
        MyReplace tmpNode
    Next
End Sub

Private Sub MyReplace(tNode As Object)
    Dim sValue As String
    Dim sArr() As String
    Dim tmpObj As Object
    Dim i As Long
    Set tmpObj = tNode.Attributes.getNamedItem("x")
    If tmpObj Is Nothing Then Exit Sub
    sValue = tmpObj.Text
    If InStr(sValue, ",") Then
        sArr = Split(sValue, ",")
        For i = LBound(sArr) To UBound(sArr)
            sArr(i) = CLng(sArr(i)) * 2
        Next
        tmpObj.Text = Join(sArr, ",")
    Else
        tmpObj.Text = sValue * 2
    End If
End Sub
' 新人都不喜欢自定义函数么?哪怕功能函数也行呐?
' 函数调用自身那叫啥?呃,一时间忘了。
2013-11-17 20:28
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:10 
Private Sub Command1_Click()
  Dim Dom As New DOMDocument
  Dom.async = False
  Dim x As IXMLDOMNode
  Dim node As IXMLDOMNode
  Dim arr() As String
  Dim brr As String
  Dim xvalue As String
  '加载xml
  Dom.Load "E:\ts.xml"
  Set node = Dom.selectSingleNode("root").selectSingleNode("element").selectSingleNode("rec")
  For Each x In node.childNodes
       '获取限定值
       xvalue = x.Attributes.getNamedItem("x").Text
      
       '判断如果x存在多个值,将值x2
       If InStr(xvalue, ",") Then
          arr = Split(xvalue, ",")
          brr = ""
          For i = LBound(arr) To UBound(arr)
              arr(i) = Val(arr(i)) * 2
              brr = brr & arr(i) & ","
          Next
          x.Attributes.getNamedItem("x").Text = Left(brr, Len(brr) - 1)
       Else
          '输出双倍的x
          '并保存
          x.Attributes.getNamedItem("x").Text = xvalue * 2
         
       End If
  Next
  Dom.save ("e:\ts1.xml")
  Set Dom = Nothing
  MsgBox "双倍执行完毕"
End Sub
'1,要正确定义类型  2,未正确进行字符串运算  3,Dom.save 语句位置错
'为方便调试,修改后的文件为ts1.xml,本代码只能地rec节点内的x值修改,rec节点内子节点的x值不能修改
2013-11-17 20:58
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:0 
回复 3楼 bczgvip
顶一下。那叫递归。
2013-11-18 01:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
递归,

递归有次数限制的,具体看内存的大小。一般用不完就是的。

一般循环都可以写成 递归,递归很难写成循环,听说有牛人把汉诺塔写成的循环。

授人于鱼,不如授人于渔
早已停用QQ了
2013-11-18 18:02
qq190169573
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-17
得分:0 
谢谢两委版主大大,我会认真学习de
2013-11-18 22:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-423674-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.110749 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved