用程序生成 XML 文件

这个示例演示如何用程序生成一个 XML 文件。点击按钮,程序会生成一个 XML 文件,存成 C:\new.xml,并同时将这个 XML 文件的内容显示在 TextBox 里。

创建项目 (Project) 和添加控件

打开 Visual Studio 2005。在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序 (Windows Application)。在名称 (Name) 框中键入 CreateXml,再单击确定 (OK)。

在 Toolbox 里选中 Button 控件,将其拖到 Form1 上。在 Properties 窗口将该 Button 的 Name 属性改为 btnCreate,将其 Text 属性改为 Create an XML File。

在 Toolbox 里选中 TextBox 控件,将其拖到 Form1 上。在 Properties 窗口将该 TextBox 的 Name 属性改为 txtContent,将其 Multiline 属性改为 True。

如下图。

加入代码

双击 Create an XML File 的 Button,进入代码编辑窗口。添加代码如下:

Imports System.Xml
 
Public Class Form1
 
    Private Sub btnCreate_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnCreate.Click
 
        Dim xDoc As New XmlDocument
        Dim xD As XmlDeclaration
        Dim xComment As XmlComment
        Dim xeRoot As XmlElement
        Dim xeSiteName As XmlElement
 
        xD = xDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)
        xDoc.AppendChild(xD)
 
        xComment = xDoc.CreateComment("Site Information")
        xDoc.AppendChild(xComment)
 
        xeRoot = xDoc.CreateElement("Sites")
        xDoc.AppendChild(xeRoot)
 
        xeSiteName = xDoc.CreateElement("SiteName")
        xeSiteName.InnerText = "www. B l a B l a. cn"
        xeRoot.AppendChild(xeSiteName)
 
        xDoc.Save("C:\new.xml")
 
        Me.txtContent.Text = xDoc.OuterXml
 
    End Sub
End Class

选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。

你会看到如下画面,同时在 C 盘根目录下,你会找到一个名为 new.xml 的文件。

提示

用 XmlDocument.CreateXmlDeclaration 这个方法,可以创建 XML 文件的声明。CreateXmlDeclaration 的三个参数依次表示 version, encoding 和 standalone。

用 AppendChild 方法,能够为选中节点增加一个子节点,增加的子节点的位置排在选中节点所有子节点的最后。

用 XmlDocument.CreateComment 方法,可以创建 XML 文件里的注释。

用 CreateElement 方法,可以创建一个 XML 元素 (Element)。

用 XmlElement.InnerText 属性,可以设置或者得到某个节点的内部文本,包括该节点包含的文本,以及该节点的子节点。 

 OuterXml 这个属性,可以得到 XML 文件的内容。



VB操作DOM生成XML

无论是通过生成具体的XML文件,还是动态的XML数据流,只要按照XML的格式输出相关XML节点和值就可以了,这样看来XML似乎很简单。但这并没有真正接触到XML的操作。在我们看来,这些XML无非就是一些成对的标签和相关字符组成的数据记录,毫无生命力可言。然而事实上,通过XMLDOM来操作XML则显示了XML的绝对优势(这点在生成XML时优势不明显,却在添加、删除XML节点时体验无限)。

使用XMLDOM创建XML文档,可使用Save方法生成XML文档,使用createElement方法创建XML元素、createNode创建节点,其实对于XML中的任何标签的创建都可以任意选择其中的一种,不过一般使用createElement创建顶层(根)元素,使用createNode创建子节点(元素),当然createElement和createNode的使用方法也是不同。


<%

Set objXMLdoc = CreateObject("Microsoft.XMLDOM")

Set world=objXMLdoc.createElement("世界")

objXMLdoc.appendChild(world)

Set hello=objXMLdoc.createNode("element", "你好", "")

hello.Text = "hello,world"

objXMLdoc.documentElement.appendChild(hello)

objXMLdoc.Save Server.MapPath("test2.xml")

Set objXMLdoc = Nothing

%>


CreateObject("Microsoft.XMLDOM") 声明使用XMLDOM对象 
在元素或节点被建立(createElement、createNode)时,其并没有加到文件树中,若要将节点加到文件树中,则需要插入,如appendChild。 
xmlDocument.createNode(type, name, nameSpaceURI) 表示建立一个指定型态、名称,及命名空间的新节点 

type 用来确认要被建立的节点型态,name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀,指定的命名空间会被视为预设的命名空间。

objXMLdoc.createNode("element", "你好", "") 等同于 objXMLdoc.createElement("你好") 

4,objXMLdoc.documentElement.appendChild(hello)其实就是XML文档根元素下建立节点,在本例中等同于 world.appendChild(hello),world为本例中的节点名,以此类推。

所以可以这样来写:

<%

Set objXMLdoc = CreateObject("Microsoft.XMLDOM")

Set world=objXMLdoc.createElement("世界")

objXMLdoc.appendChild(world)

Set hello=objXMLdoc.createElement("你好")

hello.Text = "hello,world"

world.appendChild(hello)

objXMLdoc.Save Server.MapPath("test2.xml")

Set objXMLdoc = Nothing

%>

需要注意的是,通过XMLDOM生成的XML文件都是UTF-8格式的,这对我们所有应用程序文件的UTF-8化作了很好的推介。

总结

生成XML数据,可以使用FSO,如FSO被禁用,可使用XMLDOM,当然还可以直接使用动态文档。不过如果融会贯通地掌握XML的操作,XMLDOM操作是必须的。



Option Explicit

Public Rs As New ADODB.Recordset
Public Conn As New ADODB.Connection

Public tempDoc As MSXML2.DOMDocument  'xml文件
Public tempNode As MSXML2.IXMLDOMNode
Public Root           As MSXML2.IXMLDOMElement
Public tempelement    As MSXML2.IXMLDOMElement
Public tempattribute     As MSXML2.IXMLDOMElement
Public emp As MSXML2.IXMLDOMElement

Private Sub Command1_Click()

    '生成一个XML DOMDocument对象
    Set tempDoc = New MSXML2.DOMDocument

    '生成根节点并把它设置为文件的根
    Set Root = tempDoc.createElement("employees")
    Set tempDoc.documentElement = Root
    '在节点上添加多个属性
    Call Root.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema")
    Call Root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
    Call Root.setAttribute("xmlns", "http://www.kingdee.com/ReK3Inventory")
        
    Do While Not Rs.EOF
        Set emp = tempDoc.createNode(MSXML2.NODE_ELEMENT, "employee", "")
        Root.appendChild emp

        '生成孩子节点添加到根节点上去,并且为这个节点设置一个属性
        Set tempNode = tempDoc.createNode(MSXML2.NODE_ELEMENT, "Employeeid", "")
        tempNode.Text = Rs(0)
        emp.appendChild tempNode
        
        Set tempNode = tempDoc.createNode(MSXML2.NODE_ELEMENT, "Firstname", "")
        tempNode.Text = Rs(1)
        emp.appendChild tempNode

        Set tempNode = tempDoc.createNode(MSXML2.NODE_ELEMENT, "Title", "")
        tempNode.Text = Rs(2)
        emp.appendChild tempNode
        Rs.MoveNext
    Loop

    Dim pi As IXMLDOMProcessingInstruction
    Set pi = tempDoc.createProcessingInstruction("xml", "version='1.0' encoding='gb2312'")

    Call tempDoc.insertBefore(pi, tempDoc.childNodes(0))
    '直接保存成文件即可
    tempDoc.Save "c:\myTest.xml"

    Unload Me

End Sub

Private Sub Form_Load()
    Dim strConn As String
    strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=LocalHost"
    Conn.CursorLocation = adUseClient
    Conn.Open strConn

    If Rs.State <> adStateClosed Then Rs.Close
    Rs.Open "Select employeeid,Firstname,Title from employees ", Conn, adOpenStatic, adLockOptimistic

End Sub






Dim oFso As New FileSystemObject
Dim oFile As Object
Dim xmlDoc As MSXML2.DOMDocument

 

    nowDate = CStr(Year(Date)) & CStr(Month(Date)) & CStr(Day(Date))
    ePath = expPath.Text + "/" + nowDate
     
    Set xmlDoc = New MSXML2.DOMDocument
    xmlDoc.validateOnParse = False
    xmlDoc.async = False
    
    Set oFso = CreateObject("scripting.filesystemobject")
    If oFso.FileExists(ePath + ".xml") Then
        oFso.DeleteFile ePath + ".xml"
    End If
    Set oFile = oFso.OpenTextFile(ePath + ".xml", 8, True) 

 

Dim str As String
    str = "select ajbh from gab_mala where ifexp is null or ifexp=''"
    oRs.Open str, oConn, 1, 1
    
    Do While Not oRs.EOF
    
        tempzdaj = "<zdaj:record ajbh='" + oRs("ajbh") + "'><ma><la>"
        oFile.WriteLine (tempzdaj)
        
        '基本信息
        str = "select xckybh,ladwdm,ladwxc,ajlb1,ajlb2,ajlb3,ajxz1,larq,swrs,ssrs,fxdz,fxdzxz,fxcs,fxbw,zwyw,dnayw,"
        str = str + "zjyw,xdhwyw,gj,gjhj,qthjwz,bjwp,zasjsx,zasjxx,fxzarscz,fxzarszz,zagj,qhdx,srcs,qrfs,jcfs,srfs,"
        str = str + "wzmj,tlfs,zasdtdms,aqms,zayy,lcfzyj,zazzhzbzcy,lxdh,xsjsfzr,gajgfzr,tbr,tbrq from gab_mala where ajbh='" & oRs("ajbh") & "'"
        oRsTemp.Open str, oConn, 1, 1
       
        Do While Not oRsTemp.EOF
            Set root = xmlDoc.createNode(1, "jbxx", "")
            Set temp = xmlDoc.appendChild(root)
            
            Set onode = xmlDoc.createNode("element", "rec", "")
            Set temp = root.appendChild(onode)
            
                For i = 0 To oRsTemp.Fields.Count - 1
                
                Set child = xmlDoc.createNode("element", oRsTemp.Fields(i).Name, "")
                  
                If Not IsNull(oRsTemp.Fields(i)) Then
                    If oRsTemp.Fields(i).Name = UCase("fxcs") Or oRsTemp.Fields(i).Name = UCase("fxbw") Or oRsTemp.Fields(i).Name = UCase("zagj") Or oRsTemp.Fields(i).Name = UCase("qhdx") Or oRsTemp.Fields(i).Name = UCase("srcs") Or oRsTemp.Fields(i).Name = UCase("qrfs") Or oRsTemp.Fields(i).Name = UCase("jcfs") Or oRsTemp.Fields(i).Name = UCase("srfs") Or oRsTemp.Fields(i).Name = UCase("wzmj") Or oRsTemp.Fields(i).Name = UCase("zayy") Then
                        child.Text = CL(oRsTemp.Fields(i))
                    Else
                        child.Text = oRsTemp.Fields(i)
                    End If
                Else
                    child.Text = ""
                End If
                  
                  Set temp = onode.appendChild(child)
                Next
                
                rstoxml = root.xml

            oFile.WriteLine (rstoxml)
            xmlDoc.removeChild (root)
       
            oRsTemp.MoveNext
        Loop
        oRsTemp.Close

'人员
        
        str = "select manid from caseman where caseno='" & oRs("ajbh") & "'"
        oRs1.Open str, oConn, 1, 1
        
        If oRs1.RecordCount > 0 Then
            Set root = xmlDoc.createNode(1, "xyry", "")
            Set temp = xmlDoc.appendChild(root)
        End If
        
        Do While Not oRs1.EOF
            str = "select ztrybh,name as xm,othername as bmhch,sex as xb,birthday as csrqsx,birthday as csrqxx,jzd as hjd,ABODEADDR as hjdxz,STATURE as sgsx,STATURE as sgxx,ACCENT as ky,BODYSHAPE as tmtz,FACESHAPE as tbbj,'' as qttz,SPEC as zc,CARDID as sfzh,'' as qtzjmc,'' as qtzjhm,'' as zp from smaninfo"
            str = str + " where manid='" & oRs1("manid") & "'"
            oRsTemp.Open str, oConn, 1, 1
            
            Do While Not oRsTemp.EOF
                
                
                Set onode = xmlDoc.createNode("element", "rec", "")
                Set temp = root.appendChild(onode)
                
                    For i = 0 To oRsTemp.Fields.Count - 1
                    
                    Set child = xmlDoc.createNode("element", oRsTemp.Fields(i).Name, "")
                      
                    If Not IsNull(oRsTemp.Fields(i)) Then
                        If oRsTemp.Fields(i).Name = UCase("ky") Or oRsTemp.Fields(i).Name = UCase("tmtz") Or oRsTemp.Fields(i).Name = UCase("tbbj") Or oRsTemp.Fields(i).Name = UCase("zc") Then
                            child.Text = CL(oRsTemp.Fields(i))
                        Else
                            If oRsTemp.Fields(i).Name = UCase("csrqsx") Or oRsTemp.Fields(i).Name = UCase("csrqxx") Then
                                child.Text = CLDate(oRsTemp.Fields(i))
                            Else
                                If oRsTemp.Fields(i).Name = UCase("ztrybh") Then
                                    child.Text = "T" + oRsTemp.Fields(i)
                                Else
                                    child.Text = oRsTemp.Fields(i)
                                End If
                            End If
                        End If
                    Else
                        child.Text = ""
                    End If
                      
                      Set temp = onode.appendChild(child)
                    Next
                                      
                oRsTemp.MoveNext
            Loop
            oRsTemp.Close
            
            oRs1.MoveNext
        Loop
        
        If oRs1.RecordCount > 0 Then
            rstoxml = root.xml
            oFile.WriteLine (rstoxml)
            xmlDoc.removeChild (root)
        End If
        
        oRs1.Close

        tempzdaj = "</la></ma></zdaj:record>"
        oFile.WriteLine (tempzdaj)
        oRs.MoveNext
        
    Loop
    
    oRs.Close

set oFso=Nothing


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了多种方式生成XML文件。下面介绍两种常用的方式。 1. 使用DOM生成XML文件 DOM是一种树形结构的API,可以通过创建XML文档树来生成XML文件。以下是一个简单的Java代码示例,演示如何使用DOM生成一个名为person.xmlXML文件: ```java import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class GenerateXml { public static void main(String[] args) throws Exception { // 创建XML文档对象和根元素 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("Person"); doc.appendChild(root); // 添加子元素和文本节点 Element nameNode = doc.createElement("name"); nameNode.appendChild(doc.createTextNode("John")); root.appendChild(nameNode); Element ageNode = doc.createElement("age"); ageNode.appendChild(doc.createTextNode("30")); root.appendChild(ageNode); // 将XML文档保存到文件中 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("person.xml")); transformer.transform(source, result); System.out.println("XML file saved!"); } } ``` 运行该程序将会生成一个名为person.xml文件,包含以下内容: ```xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Person> <name>John</name> <age>30</age> </Person> ``` 2. 使用JAXB生成XML文件 JAXB是Java Architecture for XML Binding的缩写,可以通过注解将Java对象转换为XML文件。以下是一个简单的Java代码示例,演示如何使用JAXB生成一个名为person.xmlXML文件: ```java import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class GenerateXml { public static void main(String[] args) throws Exception { Person p = new Person("John", 30); // 使用JAXB将对象转换为XML并保存到文件中 JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(p, new File("person.xml")); System.out.println("XML file saved!"); } } ``` 运行该程序将会生成一个名为person.xml文件,包含以下内容: ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <person> <age>30</age> <name>John</name> </person> ``` 可以看到,JAXB将属性按照字母顺序排序,并将Java对象转换为小写的XML元素。如果需要自定义XML元素的名称和属性的顺序,可以使用JAXB注解进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值