新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> XML与各种文件格式的相互转换及相关工具。 word to xml, xml to word, html to xml, xml to pdf,
    csv to xml, rtf to xml, text to xml, xml to text, xls to xml, xml to xls
    FOP
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 WORD to XML, HTML to XML 』 → 如何实现文本文件与XML文本格式的转换 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 24972 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 如何实现文本文件与XML文本格式的转换 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     漂泊水手 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:78
      门派:XML.ORG.CN
      注册:2006/1/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给漂泊水手发送一个短消息 把漂泊水手加入好友 查看漂泊水手的个人资料 搜索漂泊水手在『 WORD to XML, HTML to XML 』的所有贴子 引用回复这个贴子 回复这个贴子 查看漂泊水手的博客楼主
    发贴心情 

    用Msxml.dll 解析器吧,我也刚学一起研究一下

    对于XML文档,插入、修改、检索等数据操作工作可以通过一个XML解析器及其列举的一系列对象来完成。 Microsoft的XML解析器驻留在名为msxml.dll的动态链接库文件中。因为msxml是一个COM对象,所以可以在任何兼容ActiveX的环境中使用它,如在VB和 ASP中。本文介绍在Visual Basic中操纵XML文档的具体方法。  

    装载XML文档  
    新建一个VB Standard EXE工程项目。在Form1中添加一个CommandButton控件,将其Name和Caption属性分别设为cmdLoad和Load XML。为了使用msxml解析器,必须事先设置工程项目对msxml.dll的引用。选择Project菜单的 References命令,选中Microsoft XML, version 2.0或更高版本。将下列代码加入 cmdLoad_Click事件:  
    Option Explicit
    Dim xml As DOMDocument
    Private Sub cmdLoad_Click()
    Set xml = New DOMDocument
    Call xml.Load(App.Path & “flight.xml")
    ' flight.xml为描述航班信息的XML文档
    End Sub

    运行该程序,点击Load XML按钮即可装载XML文档。载入的XML文档包含一个按照树状结构排列的节点对象集合,顶层节点或根节点是 documentElement。每个节点都有一组属性和方法,每个节点可以包含一个或多个子节点,当然也可以不包含任何节点。必须先取得对根节点的引用才能操纵XML文档。在 cmdLoad_Click事件代码后添加下列代码:  

    Dim root As IXMLDOMElement
    Set root = xml.documentElement

    遍历节点集合  
    可以使用Visual Basic的For Each...Next循环结构在节点对象集合中循环。在cmdLoad_Click事件代码后添加下列代码:  
    Dim node As IXMLDOMNode
    For Each node In root.childNodes
    Debug.Print node.Text
    Next

    运行后点击Load XML按钮,将会在Immediate窗口中看到如下输出结果:  

    2000年10月15日  
    北京 首都国际 香港 赤邋角 中国国际航空公司 波音公司  
    B747 13:00 15:55  
    上海 浦东 法兰克福 美茵 塔什干 尤日内 汉莎航空公司 空中客车工业公司  
    A330 21:45 01:45  

    注意,每个节点的Text属性不仅包含自身的属性值,还包含其下属所有子节点的Text属性值。一般情况下,不会同时操作所有的节点。可以使用 selectNodes方法取得对一个特定的节点子集的引用,selectNodes方法返回一个 IXMLDOMNodeList对象。在cmdLoad_Click事件代码后添加下列代码:  

    Dim flightNodes As IXMLDOMNodeList
    Set flightNodes = root.selectNodes(“航班")
    For Each node In flightNodes
    Debug.Print node.selectSingleNode
    (“离站时间").Text & “――"  
    &node.selectSingleNode (“到站时间").Text
    Next

    这段代码使用selectNodes方法选择根节点下所有的“航班”节点,然后使用selectSingleNode方法选择“航班”节点下的“离站时间”和“到站时间”,读取并打印它们的Text属性值。  

    可以使用childNodes集合以递归的方式层次化显示XML 文档的内容。  

    首先,在Form1中声明一个子过程PrettyPrint。  

    Public Sub PrettyPrint(node As IXMLDOMNode,
    Optional tabLevel As Integer=0)
    Dim childNode As IXMLDOMNode
    If node.nodeName<>vbNullStrin  
    And node.nodeName < >“#text" Then
    Debug.PrintString(tabLevel,Chr$(9))
    &“< "&node.nodeName&“ >"
    End If
    If node.hasChildNodes Then
    For Each childNode In node.childNodes
    Call PrettyPrint(childNode,tabLevel+1)
    Next
    Else
    Debug.PrintString(tabLevel+1,Chr$(9))&node.Text
    End If
    If node.nodeName< >vbNullString And node.nodeName
    < >“#text" Then
    Debug.PrintString
    (tabLevel,Chr$(9))&“< /"&node.nodeName&“ >"
    End If
    End Sub

    然后在Form1中加入第2个CommandButton控件,将其 Name和Caption属性分别设为cmdPrint和Print。将下列代码加入事件cmdPrint_Click中:  

    Private Sub cmdPrint_Click()
    If Not xml Is Nothing Then
    Call PrettyPrint
    (xml.documentElement)
    End If
    End Sub

    运行程序。首先点击Load XML按钮加载flight.xml,然后点击Print按钮。在Immediate窗口中可以看到层次分明、易于阅读的输出结果。子过程 PrettyPrint在documentElement的子节点中循环,打印每个节点的nodeName属性值,而每个子节点又递归调用PrettyPrint。XML文档内各节点内在的相似性是XML最具吸引力的特性,每个子节点都与其父节点有着相同的属性和方法(尽管各自的内容通常不同),这就使得为同一文档中的所有或部分节点编写某种规则变得相对简单。  

    修改节点内容  
    如同修改数据库中的记录一样,也可以修改XML文档中节点的内容。下列代码修改了flight.xml文档中“发布日期”节点的Text属性值:  
    Set node = root.selectSingleNode(“发布日期")
    If Not node Is Nothing Then
    node.Text = “2000年10月20日"
    End If

    修改了文档内容之后,可以使用Save方法保存修改后的文档。Save方法可以将XML文档保存为文件、数据流或ASP的Response对象。Save方法的用法如下:  

    xml.save App.Path & “flightupdated.xml"

    将上面两段代码添加在cmdLoad_Click事件中,运行程序。点击Load XML按钮,在程序工作目录中会增加一个新文件flightupdated.xml。在IE5 中打开该文件,可以看到“发布日期”标记的文本已经被改为“2000年10月20日”。  
    ----------------------------------------------------------
    在实际应用中,XML可以被用作数据传输格式、可搜索数据库、可定制的数据存储方式和显示信息的数据源(需要XSL或如VB这样的编程语言的帮助)。因为msxml是一个COM对象,所以可以在ASP页中使用它的实例,然后方便地使用VBScript或JScript编程来操纵它。
    我以前在介绍XML和让别人试着使用DOM时,不只一个人问过我用DOM是否能用来凭空直接生成一个XML文件。

      当然,这是当然可以的了,其次是怎么写程序呢。

      那我就这个问题,专门在这篇文章中用VB和MSXML的COM接口的DOM实现的一个例子来讲一下:

      首先我要说明的是,我用的MSXML的版本是IE5带的,版本号是5.0.2919.3800,微软的早期版本的接口和新的有些不一样,所以自己编程时,应该看一下她的接口和说明。

      如果你对vb和COM不太熟悉,看下面的就可能比较费劲了,但VB比起其他的语言实现,应该是比较简单清楚的了。

      首先声明下面要用的几个对象的变量:

    Dim tempdoc As MSXML.DOMDocument
    Dim tempnode As MSXML.IXMLDOMNode
    Dim tempelement As MSXML.IXMLDOMElement
    Dim tempattribute As MSXML.IXMLDOMElement
    Dim root As MSXML.IXMLDOMElement

      生成一个XML DOMDocument对象

    Set tempdoc = New MSXML.DOMDocument

      生成根节点并把它设置为文件的根

    Set root = tempdoc.createElement("MyRoot")
    Set tempdoc.documentElement = root

      生成孩子节点添加到根节点上去,并且为这个节点设置一个属性

    Set tempnode = tempdoc.createNode(MSXML.NODE_ELEMENT, "MyNode", "")
    tempnode.Text = "MyNodeValue"
    root.appendChild tempnode

      取得元素节点的接口,添加属性

    Set tempelement = tempnode
    tempelement.setAttribute "MyAttribute", "MyAttributeValue"

      写xml文件

    Open "MyXMLFile.xml" for output as #1
    Print #1, root.XML
    Close #1

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/1/3 20:20:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 WORD to XML, HTML to XML 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2022/12/9 23:46:28

    本主题贴数5,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  如何实现文本文件与XML文本格式的转换(362字) - anyoneokay,2005年12月2日
        回复:  和3楼的一样会有一个错误91(27字) - lijie1586,2006年12月2日
        回复:  谢谢!(6字) - bibiye,2006年3月12日
        回复:  按照上面的代码遍历节点集合不成功.提示"实"时错误91,对象变量或WITH块变量未设置",请问是什..(95字) - wind820,2006年3月11日
        回复:  用Msxml.dll 解析器吧,我也刚学一起研究一下对于XML文档,插入、修改、检索等数据操作..(6075字) - 漂泊水手,2006年1月3日

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