'先引用MS XML,2.6对象库 'Form1上7个标签,7个文本框 Option ExplicitPrivate p_AppPath As String' 返回各个节点的值Private Function GetNodeValue(ByVal start_at_node As IXMLDOMNode, ByVal node_name As String, Optional ByVal default_value As String = "") As String Dim value_node As IXMLDOMNode Set value_node = start_at_node.selectSingleNode(".//" & node_name) If value_node Is Nothing Then GetNodeValue = default_value Else GetNodeValue = value_node.Text End IfEnd FunctionPrivate Sub LoadValues() Dim xml_document As DOMDocument Dim values_node As IXMLDOMNode ' 载入文件 Set xml_document = New DOMDocument xml_document.Load p_AppPath & "Personal.xml" If xml_document.documentElement Is Nothing Then Exit Sub End If '寻找节点 Set values_node = xml_document.selectSingleNode("个人信息") ' 读取各个节点的值 txtName.Text = GetNodeValue(values_node, "姓名", "???") txtSex.Text = GetNodeValue(values_node, "性别", "???") txtBirthday.Text = GetNodeValue(values_node, "出生日期", "???") txtAddress.Text = GetNodeValue(values_node, "地址", "???") txtZip.Text = GetNodeValue(values_node, "邮编", "???") txtQQ.Text = GetNodeValue(values_node, "QQ", "???") txtHomepage.Text = GetNodeValue(values_node, "个人主页", "???") Set xml_document = Nothing End Sub' 保存现有的值Private Sub SaveValues() Dim xml_document As DOMDocument Dim values_node As IXMLDOMNode ' 建立XML文件 Set xml_document = New DOMDocument Set values_node = xml_document.createElement("个人信息") xml_document.appendChild values_node CreateNode values_node, "姓名", txtName.Text CreateNode values_node, "性别", txtSex.Text CreateNode values_node, "出生日期", txtBirthday.Text CreateNode values_node, "地址", txtAddress.Text CreateNode values_node, "邮编", txtZip.Text CreateNode values_node, "QQ", txtQQ.Text CreateNode values_node, "个人主页", txtHomepage.Text ' 保存XML文件 xml_document.save p_AppPath & "Personal.xml" Set xml_document = Nothing End SubPrivate Sub CreateNode(ByVal parent As IXMLDOMNode, ByVal node_name As String, ByVal node_value As String) Dim new_node As IXMLDOMNode Set new_node = parent.ownerDocument.createElement(node_name) new_node.Text = node_value parent.appendChild new_node End SubPrivate Sub Form_Load() ' 获得程序运行目录 p_AppPath = App.Path If Right$(p_AppPath, 1) <> "\" Then p_AppPath = p_AppPath & "\" ' 加载值 LoadValues End SubPrivate Sub Form_Unload(Cancel As Integer) ' 保存现有的值 SaveValues End Sub
一个是采用xml的控件,有相关的函数来写。还有一个就是将其作为标准的txt 文件,做一个模板,直接去写文件就是了,然后处理模板里面的宏替换标识。
'Form1上7个标签,7个文本框
Option ExplicitPrivate p_AppPath As String' 返回各个节点的值Private Function GetNodeValue(ByVal start_at_node As IXMLDOMNode, ByVal node_name As String, Optional ByVal default_value As String = "") As String Dim value_node As IXMLDOMNode
Set value_node = start_at_node.selectSingleNode(".//" & node_name)
If value_node Is Nothing Then
GetNodeValue = default_value
Else
GetNodeValue = value_node.Text
End IfEnd FunctionPrivate Sub LoadValues() Dim xml_document As DOMDocument Dim values_node As IXMLDOMNode ' 载入文件 Set xml_document = New DOMDocument
xml_document.Load p_AppPath & "Personal.xml"
If xml_document.documentElement Is Nothing Then Exit Sub End If '寻找节点
Set values_node = xml_document.selectSingleNode("个人信息")
' 读取各个节点的值
txtName.Text = GetNodeValue(values_node, "姓名", "???")
txtSex.Text = GetNodeValue(values_node, "性别", "???")
txtBirthday.Text = GetNodeValue(values_node, "出生日期", "???")
txtAddress.Text = GetNodeValue(values_node, "地址", "???")
txtZip.Text = GetNodeValue(values_node, "邮编", "???")
txtQQ.Text = GetNodeValue(values_node, "QQ", "???")
txtHomepage.Text = GetNodeValue(values_node, "个人主页", "???")
Set xml_document = Nothing
End Sub' 保存现有的值Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode
' 建立XML文件
Set xml_document = New DOMDocument
Set values_node = xml_document.createElement("个人信息")
xml_document.appendChild values_node
CreateNode values_node, "姓名", txtName.Text
CreateNode values_node, "性别", txtSex.Text
CreateNode values_node, "出生日期", txtBirthday.Text
CreateNode values_node, "地址", txtAddress.Text
CreateNode values_node, "邮编", txtZip.Text
CreateNode values_node, "QQ", txtQQ.Text
CreateNode values_node, "个人主页", txtHomepage.Text
' 保存XML文件
xml_document.save p_AppPath & "Personal.xml"
Set xml_document = Nothing
End SubPrivate Sub CreateNode(ByVal parent As IXMLDOMNode, ByVal node_name As String, ByVal node_value As String) Dim new_node As IXMLDOMNode
Set new_node = parent.ownerDocument.createElement(node_name)
new_node.Text = node_value
parent.appendChild new_node
End SubPrivate Sub Form_Load()
' 获得程序运行目录
p_AppPath = App.Path
If Right$(p_AppPath, 1) <> "\" Then p_AppPath = p_AppPath & "\"
' 加载值
LoadValues
End SubPrivate Sub Form_Unload(Cancel As Integer)
' 保存现有的值
SaveValues
End Sub
我这里还有一个问题。对于下面这样的xml文档,如果我需要把下面3个X_COORDINATE 和Y_COORDINATE都输出到form控件上的文本框内。怎么操作?
另外新加了一个button希望在触发cmd_click时能把文本框中的内容写到原来的xmlfile 里,上面的例子是创建一个新的节点,但我这个xml很大,大部分内容我不想改变,所以上面的程序不是很适用。有没有更好的代码。
谢谢。
<DIE_DEFINITION_SITE_LIST>
<WAFER_POSITION>
<X_COORDINATE dt:dt="float">-75000.0001881031</X_COORDINATE>
<Y_COORDINATE dt:dt="float">75000.0149357803</Y_COORDINATE>
</WAFER_POSITION>
<WAFER_POSITION>
<X_COORDINATE dt:dt="float">-60000.0001881031</X_COORDINATE>
<Y_COORDINATE dt:dt="float">60000.0149357803</Y_COORDINATE>
</WAFER_POSITION>
<WAFER_POSITION>
<X_COORDINATE dt:dt="float">104999.999811897</X_COORDINATE>
<Y_COORDINATE dt:dt="float">-74999.9850642197</Y_COORDINATE>
</WAFER_POSITION>
</DIE_DEFINITION_SITE_LIST>