实例演练XML编程

VC 读写XML文件实例运用 VC项目中实现读写XML文件,包中有两个工程启动文件--VC6的.dsp和VS2010的.sln文件。代码中注释详细,包中另附“xml学习笔记.txt”文档,总结了针对xml读写操作的常用函数。 立即下载
本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习ASP+ XML编程的朋友们,还是具备一定的参考价值的。

  读者可以通过此实例,了解在ASP(Active Server Page)中如何操纵XML文件,并进行数据的各种处理,包括 XML节点的建立、修改、删除和保存等等。文中涉及到的技术包括ASP, VBScript,DOM, XML和XSL等。

  本文未对使用到的技术进行深入的理论介绍,因此,读者需要具备一定的相关知识,尤其是对ASP、XML和DOM应该有一定的了解。通读本文,并参考源代码,相信读者一定可以熟练地掌握 XML编程。

  一、程序说明

  例程基于B/S结构,使用XML文件存储联系信息,然后通过一个VBScript写的Class,使用DOM,对XML文件中的联系信息进行各种操作。

  例程提供的代码采用了统一的命名规范,主要包括:用三个字母的缩写说明变量类型,如数字类型——int,字符串类型——str,对象——obj,等等,虽然在ASP/VBScript中,不区分数据类型,但使用明显的数据类型说明,对程序的编写和维护还是很有意义的;使用有意义的变量名称,如XMLDocument对象,定义为objXMLDoc,等等,同样,这样做的也是为了更好地编写和维护程序。

  此程序可以分为后台数据处理和前台界面表现两部分。

  程序后台,使用VBScript编写了一个Class,这是在VBScript5.0版中提供的新特性。虽然这里Class的概念和真正的面向对象相去甚远,但是,在ASP中合理地使用Class,还是可以在一定程度上提高程序的运行效率和可维护性。

  前台表现,使用XSL对XML文件中的数据进行了格式化,然后以HTML的形式输出到客户端,充分体现了XML技术带来的灵活性与可定制性。格式化的过程放在了服务器端,使用ASP程序完成,这样,客户端得到的是经过格式化之后的HTML信息,避免了兼容性问题的出现。

  当然,程序对于具体的操作细节未作非常严格的检验,比如联系信息必填项的检查,但是,对于在ASP中使用DOM操作XML的有关部分,程序提供了完整的示例代码。

  二、XML文件说明(persons.XML)

  例程中使用到的XML文件结构十分简单,并且没有定义相关的Schema或者DTD,因为,对于此程序这是不必要的。当然,如果读者愿意自己定义一个的话,也不会对程序的运行产生影响。

  程序的数据结构定义如下,Persons集合,它包含多个Person对象,每一个Person对象包括姓名Name、英文名Nick、手机Mobile、电话Tel、电子邮件Email、腾讯QQ和所在公司Company的属性。将以上定义对应到XML文件即,Persons为根节点,Person为Persons的子节点,Name、Nick、Mobile、Tel、Email、QQ和Company为Person的子节点。

  这样,我们得到的XML文件内容如下:

  <?XML version="1.0" encoding="gb2312"?>
  <Persons>
    <Person>
       <Name>小东</Name>
      <Nick>gwd</Nick>
      <Mobile>139XXXXXXXX</Mobile>
      <Tel>XXXXXXXX</Tel>
      <Email>gwd@chinaren.com</Email>
      <QQ>7066015</QQ>
      <Company>XXX</Company>
    <Person>
  </Person>

  读者需要注意<?xml version="1.0" encoding="gb2312"?>这一行,XML默认不支持中文,通过设置encoding属性,才可以使XML正确地显示中文。读者可以在IE5.0及以上版本的浏览器中访问此文件,它会以 树型结构把数据显示出来。

  三、格式转换XSL文件说明(Persons.xsl)

  例程中使用XSL对XML数据进行格式化,并以HTML的形式返回到客户端。这个过程也可以放在客户端进行,但考虑到兼容性的问题,例程中采用了在服务器端通过ASP操纵DOM进行格式化的方法。

  XSL文件的内容如下,

 

<?XML version="1.0" encoding="gb2312"?>
<xsl:stylesheet XMLns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Persons">
<script language="Javascript">
 function add()
 {
  window.open("add.asp", "add", "width=300,height=320,resize=no");
 }

 function edit(intId)
 {
  window.open("edit.asp?id="+intId, "edit", "width=300,height=320,resize=no");
 }
</script>
<table width="600" border="0" align="center">
 <tr>
  <td align="right"><a href="Javascript:add();" title="添加新联系人">添加新联系人</a>  </td>
 </tr>
</table>

<table align="center" width="680" cellspacing="1" cellpadding="2" border="0" bgcolor="#666600">
 <tr class="title" bgcolor="#E5E5E5">
  <td width="25"><xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;</td>
  <td>姓名</td>
  <td>英文名</td>
  <td>手机</td>
  <td>电话</td>
  <td>Email</td>
  <td>QQ</td>
  <td>所在公司</td>
 </tr>
 <xsl:for-each select="Person">
 <TR BGCOLOR="#FFFFFF">
  <TD ALIGN="right"><xsl:value-of select="position()"/></TD>
  <TD STYLE="color:#990000"><A><xsl:attribute name="HREF">Javascript:edit('<xsl:value-of select="position()"/>');</xsl:attribute><xsl:attribute name="title">修改信息  </xsl:attribute><xsl:value-of select="Name"/></A></TD>
  <TD><xsl:value-of select="Nick"/></TD>
  <TD><xsl:value-of select="Mobile"/></TD>
  <TD><xsl:value-of select="Tel"/></TD>
  <TD><A><xsl:attribute name="HREF">mailto:<xsl:value-of select="Email"/></xsl:attribute><xsl:value-of select="Email"/></A></TD>
  <TD><xsl:value-of select="QQ"/></TD>
  <TD><xsl:value-of select="Company"/></TD>
 </TR>
 </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

  在服务器端的转换使用一个函数来完成,格式化成功,返回HTML字符串,格式化失败,打印出错误信息,如下,

'*******************************************
' 说明:使用XSL文件格式化XML文件。
' 作者:gwd 2002-11-05
' 参数:strXmlFile -- XML文件,路径+文件名
' strXslFile -- Xsl文件,路径+文件名
' 返回:成功 -- 格式化后的HTML字符串
' 失败 -- 自定义的错误信息
'*******************************************
Function FormatXml(strXMLFile, strXslFile)
 Dim objXML, objXsl

 strXmlFile = Server.MapPath(strXMLFile)
 strXslFile = Server.MapPath(strXslFile)

 Set objXml = Server.CreateObject("MSXML2.DOMDocument")
 Set objXsl = Server.CreateObject("MSXML2.DOMDocument")

 objXML.Async = False
 If objXml.Load(strXMLFile) Then
  objXsl.Async = False
  objXsl.ValidateonParse = False
  If objXsl.Load(strXslFile) Then
   On Error Resume Next ' 捕获transformNode方法的错误
   FormatXml = objXML.transformNode(objXsl)
   If objXsl.parseError.errorCode <> 0 Then
    Response.Write "<br><hr>"
    Response.Write "Error Code: " & objXsl.parseError.errorCode
    Response.Write "<br>Error Reason: " & objXsl.parseError.reason
    Response.Write "<br>Error Line: " & objXsl.parseError.line
    FormatXml = "<span class=""alert"">格式化XML文件错误!</span>"
   End If
  Else
   Response.Write "<br><hr>"
   Response.Write "Error Code: " & objXsl.parseError.errorCode
   Response.Write "<br>Error Reason: " & objXsl.parseError.reason
   Response.Write "<br>Error Line: " & objXsl.parseError.line
   FormatXML = "<span class=""alert"">装载XSL文件错误!</span>"
  End If
 Else
  Response.Write "<br><hr>"
  Response.Write "Error Code: " & objXML.parseError.errorCode
  Response.Write "<br>Error Reason: " & objXML.parseError.reason
  Response.Write "<br>Error Line: " & objXML.parseError.line
  FormatXml = "<span class=""alert"">装载XML文件错误!</span>"
 End If

 Set objXsl = Nothing
 Set objXML = Nothing
End Function

  四、操作 XML 数据的Cls_Person类说明(clsPerson.asp)

  Cls_Person类用来完成与联系人信息相关的各种操作,包括添加、修改和删除等等,它使用 VBScript编写。Cls_Person包括Id、Name、Nick、Mobile、Tel、Email、QQ和Company 属性,对应于XML文件中的Person节点。Cls_Person包括GetInfoFromXml、AddToXml、EditToXml和DeleteForm XML四个主要方法,分别完成获取信息,添加信息,修改信息和删除信息四个功能。

  Cls_Person的具体实现如下,

 

'***************************************************
' 说明:Person类
' 作者:gwd 2002-11-06
' 引用:pub/constpub.asp
'***************************************************

Class Cls_Person

Private m_intId ' Id,对应Person节点在Persons集合中的位置
Private m_strName ' 姓名
Private m_strNick ' 英文名
Private m_strMobile ' 手机
Private m_strTel ' 电话
Private m_strEmail ' 电子邮件
Private m_strQQ ' QQ号
Private m_strCompany ' 所在公司
Private m_strError ' 出错信息

' 类初始化
Private Sub Class_Initialize()
 m_strError = ""
 m_intId = -1
End Sub

' 类释放
Private Sub Class_Terminate()
 m_strError = ""
End Sub

'-----读写各个属性---------------------------

Public Property Get Id
 Id = m_intId
End Property

Public Property Let Id(intId)
 m_intId = intId
End Property

Public Property Get Name
Name = m_strName
End Property

Public Property Let Name(strName)
 m_strName = strName
End Property

Public Property Get Nick
 Nick = m_strNick
End Property

Public Property Let Nick(strNick)
 m_strNick = strNick
End Property

Public Property Get Mobile
 Mobile = m_strMobile
End Property

Public Property Let Mobile(strMobile)
 m_strMobile = strMobile
End Property

Public Property Get Tel
 Tel = m_strTel
End Property

Public Property Let Tel(strTel)
 m_strTel = strTel
End Property

Public Property Get Email
 Email = m_strEmail
End Property

Public Property Let Email(strEmail)
 m_strEmail = strEmail
End Property

Public Property Get QQ
 QQ = m_strQQ
End Property

Public Property Let QQ(strQQ)
 m_strQQ = strQQ
End Property

Public Property Get Company
 Company = m_strCompany
End Property

Public Property Let Company(strCompany)
 m_strCompany = strCompany
End Property

'-----------------------------------------------

' 获取错误信息
Public Function GetLastError()
 GetLastError = m_strError
End Function

' 私有方法,添加错误信息
Private Sub AddErr(strEcho)
 m_strError = m_strError + "<Div CLASS=""alert"">" & strEcho & "</Div>"
End Sub

' 清除错误信息
Public Function ClearError()
 m_strError = ""
End Function

' 从XML中读取指定节点的数据,并填充各个属性
' 需要首先设置Id
Public Function GetInfoFromXml(objXMLDoc)
 Dim objNodeList
 Dim I

 ClearError

 If objXMLDoc Is Nothing Then
  GetInfoFromXML = False
  AddErr "Dom对象为空值"
  Exit Function
 End If

 If CStr(m_intId) = "-1" Then
  GetInfoFromXML = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 Else
  I = m_intId - 1 ' 要读取得节点位置
 End If

 ' 选择并读取节点信息,赋予各个属性
 Set objNodeList = objXMLDoc.getElementsByTagName("Person")
 If objNodeList.length - m_intId >= 0 Then
  On Error Resume Next
  m_strName = objNodeList(I).selectSingleNode("Name").Text
  m_strNick = objNodeList(I).selectSingleNode("Nick").Text
  m_strMobile = objNodeList(I).selectSingleNode("Mobile").Text
  m_strTel = objNodeList(I).selectSingleNode("Tel").Text
  m_strEmail = objNodeList(I).selectSingleNode("Email").Text
  m_strQQ = objNodeList(I).selectSingleNode("QQ").Text
  m_strCompany = objNodeList(I).selectSingleNode("Company").Text
  GetInfoFromXML = True
 Else
  GetInfoFromXML = False
  AddErr "获取联系信息发生错误"
  Set objNodeList = Nothing
  Exit Function
 End If
 Set objNodeList = Nothing
End Function

' 添加信息到XML文件中
' 需要首先设置好要填充的属性
Public Function AddToXml(objXMLDoc)
 Dim objPerson, objNode

 ClearError

 If objXMLDoc Is Nothing Then
  AddToXML = False
  AddErr "Dom对象为空值"
  Exit Function
 End If

 ' 创建Person节点
 Set objPerson = objXMLDoc.createElement("Person")
 objXMLDoc.documentElement.appendChild objPerson

 ' 创建各个子节点
 '-----------------------------------------------------
 Set objNode = objXMLDoc.createElement("Name")
 objNode.Text = m_strName
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Nick")
 objNode.Text = m_strNick
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Mobile")
 objNode.Text = m_strMobile
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Tel")
 objNode.Text = m_strTel
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Email")
 objNode.Text = m_strEmail
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("QQ")
 objNode.Text = m_strQQ
 objPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Company")
 objNode.Text = m_strCompany
 objPerson.appendChild objNode
 '-----------------------------------------------------

 Set objNode = Nothing
 Set objPerson = Nothing

  On Error Resume Next
 objXmlDoc.save Server.MapPath(C_XMLFILE) '保存XML文件
 If Err.Number = 0 Then
  AddToXML = True
 Else
  AddToXML = False
  AddErr Err.Description
 End If
End Function

' 从XML文件中删除数据
' 需要首先设置Id
Public Function DeleteFromXml(objXMLDoc)
 Dim objNodeList, objNode

 ClearError

 If objXMLDoc Is Nothing Then
  DeleteFromXML = False
  AddErr "Dom对象为空值"
  Exit Function
 End If

 If CStr(m_intId) = "-1" Then
  DeleteFromXML = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 End If

 Set objNodeList = objXMLDoc.getElementsByTagName("Person")
 If objNodeList.length - m_intId < 0 Then
  DeleteFromXML = False
  AddErr "未找到相应的联系人"
  Set objNodeList = Nothing
  Exit Function
 End If

 On Error Resume Next
 Set objNode = objXMLDoc.documentElement.removeChild(objNodeList(intId-1))
 If objNode Is Nothing Then
  DeleteFromXML = False
  AddErr "删除联系人失败"
  Set objNodeList = Nothing
  Exit Function
 Else
  objXmlDoc.save Server.MapPath(C_XMLFILE)
 End If
 Set objNode = Nothing
 Set objNodeList = Nothing

 If Err.Number = 0 Then
  DeleteFromXML = True
 Else
  DeleteFromXML = False
  AddErr Err.Description
 End If
End Function

' 修改XML文件中的数据
' 需要首先设置好Id
Public Function EditToXml(objXMLDoc)
 Dim objPersonList, objOldPerson, objNewPerson, objNode

 ClearError

 If objXMLDoc Is Nothing Then
  EditToXML = False
  AddErr "Dom对象为空值"
  Exit Function
 End If

 If CStr(m_intId) = "-1" Then
  EditToXML = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 End If

 Set objPersonList = objXMLDoc.getElementsByTagName("Person")
 If objPersonList.length - m_intId < 0 Then
  DeleteFromXML = False
  AddErr "未找到相应的联系人"
  Set objPersonList = Nothing
  Exit Function
 End If

 Set objOldPerson = objPersonList(m_intId-1) ' 要修改的旧节点

 Set objNewPerson = objXMLDoc.createElement("Person") ' 用来替换旧节点的新节点
 Set objNode = objXMLDoc.createElement("Name")
 objNode.Text = m_strName
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Nick")
 objNode.Text = m_strNick
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Mobile")
 objNode.Text = m_strMobile
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Tel")
 objNode.Text = m_strTel
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Email")
 objNode.Text = m_strEmail
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("QQ")
 objNode.Text = m_strQQ
 objNewPerson.appendChild objNode

 Set objNode = objXMLDoc.createElement("Company")
 objNode.Text = m_strCompany
 objNewPerson.appendChild objNode

 On Error Resume Next
 ' 进行替换
 Set objNode = objXMLDoc.documentElement.replaceChild(objNewPerson, objOldPerson)
 If objNode Is Nothing Then
 EditToXML = False
 AddErr "修改联系人失败"
 Set objOldPerosn = Nothing
 Set objNewPerson = Nothing
 Set objPersonList = Nothing
 Exit Function
Else
 objXmlDoc.save Server.MapPath(C_XMLFILE)
End If

Set objOldPerson = Nothing
Set objNewPerson = Nothing
Set objPersonList = Nothing

If Err.Number = 0 Then
 EditToXML = True
Else
 EditToXML = False
 AddErr Err.Description
End If
End Function

End Class

五、程序首页(default.asp)

  调用相应的包含文件和公共 函数,格式化XML文件,并进行显示。可以看到,页面Title是可定制的,公共的头部和尾部都做成了相应的包含文件。C_TITLE、C_XMLFILE和C_XSLFILE为公共常量,在constpub.asp文件中定义,至于它们的意义,相信读者可以很容易地明白。这里调用了上面定义的Format XML 函数。

 

<% Option Explicit
'***********************************************
' 说明:通讯录
' 作者:gwd 2002-11-05
'***********************************************
%>

<!--#include file="pub/funcXML.asp"-->
<!--#include file="pub/constpub.asp"-->
<HTML>
<HEAD>
<TITLE><% = C_TITLE %></TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=GB2312"/>
<link rel="stylesheet" href="contact.css" type="text/css">
</HEAD>
<BODY>
<!--#include file="pub/header.asp"-->
<% = FormatXml(C_XMLFILE, C_XSLFILE) %>
<br>
<!--#include file="pub/footer.asp"-->
</BODY>
</HTML>

  六、添加、修改和删除XML中的信息

  我们知道,在Cls_Person中已经定义了相应的方法,因此,在各个文件中,只需要调用对应的方法即可。添加信息的文件为add.asp,修改信息的文件为edit.asp,删除信息的文件为delete.asp,我们仅以add.asp文件为例进行说明。其中的CheckStrInput和CheckStrOutput函数,用来格式化用户的输入和输出字符串。

<% Option Explicit
'***********************************************
' 说明:37080308通讯录
' 作者:gwd 2002-11-05
'***********************************************
%>

<!--#include file="pub/funcXML.asp"-->
<!--#include file="pub/constpub.asp"-->
<!--#include file="pub/funcpub.asp"-->
<!--#include file="pub/class/clsPerson.asp"-->

<%
 Dim objXML, objPerson
 Dim strErr

 Set objXml = Server.CreateObject("MSXML2.DOMDocument")
 Set objPerson = New Cls_Person ' 生成Cls_Person对象
 If Request.Form("btnOk") <> "" Then
  If LoadXmlDoc(objXml, C_XMLFILE, False, strErr) Then ' 装载XML文件
   ' 给相应的属性赋值
   objPerson.Name = CheckStrInput(Request.Form("txtName"))
   objPerson.Nick = CheckStrInput(Request.Form("txtNick"))
   objPerson.Mobile = CheckStrInput(Request.Form("txtMobile"))
   objPerson.Tel = CheckStrInput(Request.Form("txtTel"))
   objPerson.Email = CheckStrInput(Request.Form("txtEmail"))
   objPerson.QQ = CheckStrInput(Request.Form("txtQQ"))
   objPerson.Company = CheckStrInput(Request.Form("txtCompany"))
   If Not objPerson.AddToXml(objXml) Then ' 调用Cls_Person类的AddToXML方法,添加数据
    AddErr strErr, objPerson.GetLastError
   Else
    AddErr strErr, "添加成功"
    Response.Write "<script language=""Javascript"">opener.location.reload();</script>"
   End If
  End If
 End If
 Set objXML = Nothing
%>
<HTML>
<HEAD>
<TITLE><% = C_TITLE %></TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=GB2312"/>
<link rel="stylesheet" href="contact.css" type="text/css">
<script language="Javascript">
<!--
function CheckForm()
{
 return true;
}
//-->
</script>
</HEAD>
<BODY>
<% = strErr %>
<div class="title">添加联系信息</div>
<form name="form1" method="post" action="add.asp" onsubmit="return CheckForm()">
 <table align="center" width="100%" cellspacing="1" cellpadding="2" border="0" bgcolor="#666600">
  <tr bgcolor="#ffffff">
   <td width="25%" bgcolor="#e5e5e5" align="right"><b>姓名:</b></td>
   <td width="75%"><input type="text" name="txtName" size="25" class="input" value="<%=CheckStrOutput(objPerson.Name)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>英文名:</b></td>
   <td><input type="text" name="txtNick" size="25" class="input" value="<%=CheckStrOutput(objPerson.Nick)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>手机:</b></td>
   <td><input type="text" name="txtMobile" size="25" class="input" value="<%=CheckStrOutput(objPerson.Mobile)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>电话:</b></td>
   <td><input type="text" name="txtTel" size="25" class="input" value="<%=CheckStrOutput(objPerson.Tel)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>Email:</b></td>
   <td><input type="text" name="txtEmail" size="25" class="input" value="<%=CheckStrOutput(objPerson.Email)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>QQ:</b></td>
   <td><input type="text" name="txtQQ" size="25" class="input" value="<%=CheckStrOutput(objPerson.QQ)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>所在公司:</b></td>
   <td><input type="text" name="txtCompany" size="25" class="input" value="<%=CheckStrOutput(objPerson.Company)%>"></td>
  </tr>
 </table>
 <br>
 <div align="center">
 <input type="submit" name="btnOk" value="提交">
 <input type="button" name="btnClose" value="关闭" onclick="Javascript:return window.close();">
 </div>
</form>
</BODY>
</HTML>
<%
Set objPerson = Nothing
%>

  七、总结

  到此,我们的联系信息管理程序就大功告成了。怎么样,感觉如何,应该来说还是相当简单的吧。当然了,这个例程还有许多可以改进的地方,我这里也只不过是抛砖引玉,希望读者在掌握了XML编程之后,自行修改完善吧。

  此例程已经在我本机(Windows Server 2000、IIS5.0和IE6.0)和网上进行了测试,都能够正常运行。

XML实例,针对XML进行增删改查等操作, 立即下载

相关推荐

【Cadence】 ADS Dynamic Link使用教程

在Cadence617上使用ADS Dynamic Link

乾巽的博客 6074

asp 与 database (3)

5.4 XML技术报表打印方案 随着Internet的迅速发展和广泛普及,XML的出现体现出了它的适用性和重要性。XML是由W3C定义的一种标记语言,由于XML是没有版权限制的,这样用户可以建立属于自己的一套软件而无须支付任何费用。利用ASP结合XML技术,可以实现对XML数据的报表打印操作。其原理是:通过XML强大的自定义功能,用户可以很方便地自定义出所需要的数据结构,然后在服务器端进行动态...

weixin_30448603的博客 398

GT911触摸驱动避坑指南:从寄存器读取到多点触控处理的5个关键步骤详解

本文深入解析了GT911触摸驱动开发中的关键步骤与常见问题。从硬件初始化、I2C通信建立,到核心寄存器操作、缓冲区状态管理,再到配置表烧录与多点触控数据解析,提供了详尽的避坑指南。文章结合STM32等平台的实战代码,重点阐述了驱动调试中的时序、中断处理和坐标映射等核心要点,帮助开发者高效实现稳定可靠的多点触控功能。

weixin_29189363的博客 676

XML的三种显示方法

显示XML可以使用三种形式之一:关联CSS文件显示XML、使用XSL样式表和使用XML的数据岛技术。 1.关联CSS文件显示XMLXML文件内容(example1.xml):Corsair ~~ InstantriceCSS文件内容(example1.css):Info{font-size:48pt;font-weight:bold;}P.S:需要注意的事情是CSS关联的时候是把相同类名的内容和样

instantrice的专栏 4042

使用嘉立创绘制STM32F103T8C6最小系统板

使用嘉立创EDA绘制一个属于自己的STM32最小系统板

weixin_67887035的博客 1万+

内网开发必备:银河麒麟V10离线安装全流程(含镜像挂载+yum源配置)

本文详细介绍了在内网隔离环境下,银河麒麟V10操作系统的离线安装与部署全流程。核心内容包括官方镜像的获取与校验、使用mount命令进行镜像挂载的详细步骤与问题排查,以及构建稳定、可维护的本地Yum软件仓库的完整方法论。通过实战案例演示了如何基于本地源部署LNMP环境,并提供了高级配置技巧与常见故障排除指南,旨在帮助运维人员系统性地构建高可用的内网软件供应链。

weixin_29268637的博客 557

实例演练ASP+XML编程

本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习ASP+XML编程的朋友们,还是具备一定的参考价值的。读者可以通过此实例,了解在ASP(Active Server Page)中如何操纵XML文件,并进行数据的各种处理

Jackal3的专栏 3048

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 655

XML入门笔记(二)——关于ASP网站中文乱码问题

在编写ASP代码,利用服务器端完成简历数据到 HTML 文档的转换时,运行出的网页中文乱码

YIYIYAYA1124的博客 1009

手把手教你用Qwen-7B打造医疗大模型:从数据准备到RLHF全流程实战

本文是一篇基于Qwen-7B-Chat模型构建医疗领域大模型的实战全流程指南。文章详细拆解了从数据准备、环境搭建,到增量预训练、监督微调(SFT)以及偏好对齐(DPO)的核心技术步骤,并分享了部署与持续优化的实践经验。通过LoRA等高效微调技术,帮助开发者掌握将通用大模型改造为专业领域专家的完整方法论。

weixin_29191761的博客 129

通用抓取算法AnyGrasp(Graspnet)——本地部署并测试自定义输入数据

背景:GraspNet在数据采集方面,首先将相机固定到机械臂末端,对同一个场景拍摄256个不同的角度,同时场景中的每个物体都会提前采集好3D模型,之后将其投射到仿真环境中,在仿真环境中,对抓取位姿进行打标签,如此完成数据的采集。在运行官方的测试示例时,使用的是路径下的输入数据,可以分析下。color.png(输入):rgb图像(输出):输出的生成抓取位姿的图像depth.png(输入):和当前rgb图像对应的深度图像(保存格式是单通道uint16)meta.mat。

boss-dog 1327

用JavaScript与WebService实现网页部分数据XML传送

B/S结构的程序每执行一个操作往往都需要刷新页面,在刷新过程中,服务器不但要将数据发送到客户端,还需要将一些格式信息,比如说表格、图片、标题等重新发送,占用了大量带宽。尽管IE提供了页面缓存的功能,但对于时刻发生变化的动态网页,本地缓存基本上不起什么作用。如果能够让Web服务器只传送关键数据,不传送格式就可以减少带宽占用。当然,在我的系统开发过程中,使用了智能卡进行关键数据加、解密,出于速度考

Aone --- 无限的未知 942

医院批量排班实战指南(三)日期列表生成与时段批量操作

在上一篇《批量排班功能实现指南(二):日期与时段设置》中,我们完成了日期范围选择和重复规则配置的界面搭建,实现了从第一步到第二步的跳转功能。现在我们已经可以选择日期范围和重复规则,但还缺少最关键的功能——根据规则生成日期列表并进行时段配置。本篇将继续深入批量排班的核心功能——日期列表生成与时段批量操作。根据日期范围和重复规则智能生成日期列表为每个日期配置上午、下午、夜诊时段批量时段操作提升配置效率日期列表的展示与管理。

低代码布道师的博客 1345

实例演练ASP+XML编程(转)

  本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习ASP+XML编程的朋友们,还是具备一定的参考价值的。读者可以通过此实例,了解在ASP(Active Server Page)中如何操纵XML文件,并进行数据的各种

miki52777的专栏 1546

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

>+ 实例演练ASP+XML编程(一)

本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习ASP+XML编程的朋友们,还是具备一定的参考价值的。读者可以通过此实例,了解在ASP(Active Server Page)中如何操纵XML文件,并进行数据的各种处理

西楼·记|xilou 2238

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

>+ 实例演练ASP+XML编程(三)

四、操作Xml数据的Cls_Person类说明(clsPerson.asp)Cls_Person类用来完成与联系人信息相关的各种操作,包括添加、修改和删除等等,它使用VBScript编写。Cls_Person包括Id、Name、Nick、Mobile、Tel、Email、QQ和Company属性,对应于XML文件中的Person节点。Cls_Person包括GetInfoFromXml、Add

西楼·记|xilou 1263

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

>+ 实例演练ASP+XML编程(四)

五、程序首页(default.asp)调用相应的包含文件和公共函数,格式化XML文件,并进行显示。可以看到,页面Title是可定制的,公共的头部和尾部都做成了相应的包含文件。C_TITLE、C_XMLFILE和C_XSLFILE为公共常量,在constpub.asp文件中定义,至于它们的意义,相信读者可以很容易地明白。这里调用了上面定义的FormatXml函数。 <% Option Expli

西楼·记|xilou 1466

>+ 实例演练ASP+XML编程(二)

三、格式转换XSL文件说明(Persons.xsl)例程中使用XSL对XMl数据进行格式化,并以HTML的形式返回到客户端。这个过程也可以放在客户端进行,但考虑到兼容性的问题,例程中采用了在服务器端通过ASP操纵DOM进行格式化的方法。XSL文件的内容如下,<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet xmlns:xsl="h

西楼·记|xilou 1331

学习: .NET XML实例演练,遍历XML文档和构造XML文档

学习: .NET XML实例演练,遍历XML文档和构造XML文档 撰写日期:9:29 2016/4/26 更新日期:9:29 2016/4/26 发布地址:http://www.cnblogs.com/gibbonnet/p/5434794.html 任务: 从XMLDocument遍历为Collection 从Collection构造XMLDocument 源代码 using System;...

weixin_30433075的博客 101

ASP.NET - 演练:创建网页以显示 XML 数据

数据通常是以 XML 格式提供给 Web 应用程序的。但是,XML 数据本质上是分层的,因此您可能希望能够在基于列表的控件中使用 XML 数据,如 GridView 或 DropDownList 控件。此演练演示如何将 XML 数据视为表格数据库表中的数据进行处理。  通过此演练,您将学会如何执行以下任务:·使用数据源控件读取 XML 数据并将数据提供给列表控件。·将 Grid

dodream的专栏 1168
上一篇: Visual C++ 2005中的突破性变化
下一篇: 代码测试的简单框架
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值