利用ASP发送和接收XML数据的处理方法

本文介绍如何使用ASP中的XMLHTTP对象进行HTTP请求,并展示了如何解析和操作接收到的XML数据。此外,还提供了ASP操作XML文件的具体方法,包括创建、查询、修改等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为要做移动梦网WAP的一些接口,所以要用到这种方式,接下来会有asp.net版本的,这个是ASP版本的,利用了MSXML2.XMLHTTP对像。

   request.asp

dim Https
set Https=server.createobject("MSXML2.XMLHTTP")
'定义一个XMLHTTP对像
Https.open "POST","http://127.0.0.1/testpost/response.asp",false
Https.send "<?xml version=""1.0""?><misc_command version=""1.6""><command_name>echo</command_name>
<command_data_block><sid>123456</sid><service_id>987654</service_id>
<sp_id>11111</sp_id><sp_password>22222</sp_password></command_data_block>
</misc_command>"
if Https.readystate=4 then
 response.write "提交成功"
 'readstate读取状态为4则成功,继续后面的,不成功当然就不用继续处理了
 dim objstream
 set objstream = Server.CreateObject("adodb.stream")
 '定义一个stream,因为读过来的直接拿出来是乱码的,所以得处理一下
 objstream.Type = 1
 objstream.Mode =3
 objstream.Open
 objstream.Write Https.responseBody
 objstream.Position = 0
 objstream.Type = 2
 objstream.Charset = "GB2312"
 html = objstream.ReadText
 '转好码,就放到html里,好关闭这些对像
 objstream.Close
 set objstream = nothing
 set https=nothing
end if
response.write html

response.asp

'创建DOMDocument对象
Set xml = Server.CreateObject ("msxml2.DOMDocument")
xml.async = False

'装载POST数据
xml.Load Request
If xml.parseError.errorCode <> 0 Then
 response.write "不能正确接收数据" & "Description: " & xml.parseError.reason & "<br>Line: " & xml.parseError.Line
End If

set blogchild=xml.getElementsByTagName("misc_command")
'the_text=blogchild.item(0).childnodes(1).text
'the_text=blogchild.item(0).text
'for i=0 to blogchild.length-1
response.write the_text

  利用这种方法,ASP里调用Servlet或Web Service都是很轻松的!




 

利用ASP从远程服务器上接收XML数据

http://www.kaidianle.com/article/list10381.html
<%
dim objXML
dim objRootElement
dim strValue
dim strInetURL
dim strXML
dim item
            
strInetURL ="http://pf.inetsolution.com/inetactive2001/inetactive2001news.xml"
Dim HttpReq
  
set HttpReq = server.CreateObject("MSXML2.XMLHTTP")
  
HttpReq.open "GET", "http://pf.inetsolution.com/inetactive2001/inetactive2001news.xml", False
HttpReq.send
strXML = HttpReq.responseText       
Set objXML = Server.CreateObject("Msxml2.DOMDocument")
objXML.validateonparse = true
objXML.async=false
objXML.loadXML(strXML)
if objXML.ParseError.errorCode <> 0 then
    Response.Write("Error: " & objXML.parseError.reason & "<br>")
    Response.Write("Code: 0x" & hex(objXML.parseError.errorCode) & "<br>")
    Response.Write("At Line: " & objXML.parseError.line & "<br>")
    Response.Write("At pos: " & objXML.parseError.linePos & "<br>")
                
else
    set objRootElement = objXML.documentElement
    if not isObject(objRootElement) then
        Response.Write("no file loaded")
    else
        Response.Write(objRootElement.childnodes(0).text)
    end if
end if
%>


ASP操作XML的方法

ASP通过XMLDom在服务器端操作XML文件的主要方法和实现
对于小数据量,xml文件在检索更新上于ACCESS有很多优势。

我曾经测试过不用数据库,把网站的会员信息,商品数据信息,交易信息,网站定制信息全部存放在三个xml文件中,运行结果十分正常,感觉上比数据库快多了,不过没有作测试,不能确定。

下面说一下创建,查询,修改等对xml操作的主要方法

'创建DOM对象
set objDom=server.CreateObject("MicroSoft.XMLDom")

'取得xml数据
'方法1 取得xml文件的xml数据
objDom.load("c:/test.xml")
'方法2 取得xml数据串的数据
objDom.loadxml("<people><man name="sd"/></people>")

'创建一个节点对象
Set Newnode=objDom.CreateElement("people")
'给这个节点赴值
Newnode.Text="人"
' 给这个节点添加属性
Set NewAttribute=objDom.CreateNode("attribute","name","")
NewAttribute.Text= "张三"
Newnode.SetAttributeNode NewAttribute
'给这个节点添加子节点
Set NewnodeChild=objDom.CreateElement("address")
Newnode.appendChild NewnodeChild
'保存这个节点对象
objDom.appendChild Newnode
objDom.save("c:/test.xml")

'查找一个节点对象
set objtofind=objdom.documentElement.SelectSingleNode("//people/man")
'取出这个节点对象的 节点名,节点值,某个属性值,和全部的xml
nodename=objtofind.nodename
nodevalue=objtofind.text
objtofind.GetAttributeNode("name").Nodevalue '属性名为name的属性值

'取出一个属性节点对象
set objattrtofind=objdom.documentElement.SelectSingleNode("//people/man"). GetAttributeNode("name")
'取出这个节点的属性名,属性值
nodeattrname=objattrtofind.nodename
nodeattrvalue=objattrtofind.nodevalue

'删除一个节点对象
set objnode=objdom.documentElement.SelectSingleNode("//people/man") '要删除的节点
set objparentnode=objdom.documentElement.SelectSingleNode("//people") '要删除的节点的父节点
objparentnode.removeChild objnode

'取出一个节点的字节点集合
set objnodes=objdom.documentElement.SelectSingleNode("//people/man").ChildNodes
遍历这个集合
方法1
for each element in objnodes
response.write element.nodename 字节点名
response.write element.text 字节点值
next
方法2
domlength=objnodes.length
for i = 0 to domlength-1
response.write objnodes.childnodes(i).nodename 字节点名
response.write objnodes.childnodes(i).text 字节点值
next

'取出一个节点的属性集合
set objnodes=objdom.documentElement.SelectSingleNode("//people/man").GetAttributeNode("name").attributes
遍历这个集合
for each element in objnodes
response.write element.nodename 属性名
response.write element.nodevalue 属性值
next

等能够熟练的运用xmldom对象来操作xml文件了,就可以享
受xmlhttp对象来实现asp下的许多功能了。


re:[转]ASP通过XMLDom在服务器端操作XML文件的主要方法和实现
飞飞,你怎么不介绍一下@的用法,没了这个,很多事不方便。
xml,有人也称之为数据压缩技术,顾名思义,xml是可以充当数据库来用。
所以,我们可以把xml看成是“小型的数据库”。为什么说是小型呢?因为xml本身的功能及应用方便,与数据库还是存在着一定的差别。那我们为什么要使用xml呢?因为,有时候我们的一些应用程序虽然进行数据存取,但是,如果使用数据库的话,显行有些不够灵活,方便。这个时候,我们就应该结合xml来使用。
xml既然可以看成是数据库,那它的第一步工作就当然是创建链接对象了。(以ASP+xml为例)
创建方法同链接数据库一样,用server.createobject为创建。
方法如下:
set xmlDoc= Server.CreateObject("microsoft.xmldom")
xmlDoc.async=false
xmldata=数据源绝对路径
xmlDoc.load xmldata '这里使用load方法进行链接

既于xml的数据格式是比较人性化的,可以由于人为或其它的原因,引起数据格式不合法,这时如果继续使用的话,会引起程序出程,这样,我们往往在创建好链接对象后进行数据格式验证。
方法如下:
if xmlDoc.parseError.errorCode<>0 then
....错误处理



<%
'----------------------------------------------------------------
'程序简介: 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看
'入口参数: 无
'出口参数: 无
'------------------------------------------------
'函数名字:ConnectXml()
'入口参数: filename 需要连接或打开的xml文件名
'出口参数: 无
'返回值 :ConnectXml=0,XMLMorntekDocument就是一个成功装载XML文档的对象了。
' ConnectXml<>0,则打印错误信息strError
'------------------------------------------------
dim XMLMorntekDocument

function ConnectXml(filename)
dim strSourceFile
strSourceFile = Server.MapPath(filename)
Set XMLMorntekDocument = Server.CreateObject("Microsoft.XMLDOM")
XMLMorntekDocument.async = false
XMLMorntekDocument.load(strSourceFile)
ConnectXml=XMLMorntekDocument.parseerror.errorcode
if XMLMorntekDocument.parseerror.errorcode<>0 then
strError="<h2>error"&XMLMorntekDocument.parseerror.errorcode&"</h2>"
strError=strError&XMLMorntekDocument.parseerror.reason&"<br>"
strError=strError&XMLMorntekDocument.parseerror.url&"<br>"
strError=strError&XMLMorntekDocument.parseerror.line&"<br>"
strError=strError&XMLMorntekDocument.parseerror.filepos&"<br>"
strError=strError&XMLMorntekDocument.parseerror.srcText&"<br>"
response.write strError
end if
end function

'------------------------------------------------
'函数名字:CloseXml()
'入口参数: 无
'出口参数: 无
'------------------------------------------------
function CloseXml(XMLMorntekDocument)
if IsObject(XMLMorntekDocument) then
set XMLMorntekDocument=nothing
end if
end function


'------------------------------------------------
'函数名字:SelectXmlNodeText(elementname)
'入口参数: elementname 元素的名字
'出口参数: 无
'------------------------------------------------
function SelectXmlNodeText(elementname)
elementname="//"&elementname
temp=XMLMorntekDocument.selectSingleNode(elementname).text
selectXmlNodeText= server.htmlencode(temp)

end function

'------------------------------------------------
'函数名字:InsertXmlNodeText(befelementname,elementname,elementtext)
'入口参数: elementname 插入的元素的名字
' befelementname在此元素的名字前面插入元素
' elementtext 插入的元素的文本
'出口参数: 无
'------------------------------------------------
function InsertXmlNodeText(befelementname,elementname,elementtext)
dim befelement,element
set befelement=XMLMorntekDocument.selectSingleNode("//"&befelementname)
set element= XMLMorntekDocument.createelement(elementname)
befelement.insertBefore element,befelement.firstchild
element.text=elementtext
end function

'------------------------------------------------
'函数名字:UpdateXmlNodeText(elementname,newelementtext)
'入口参数: elementname 元素的名字
' newelementtext元素的新文本
'出口参数: 无
'------------------------------------------------
function UpdateXmlNodeText(elementname,newelementtext)
dim element
set element=XMLMorntekDocument.selectSingleNode("//"&elementname)
element.text=newelementtext
end function

'------------------------------------------------
'函数名字:DeleteXmlNodeText(elementname)
'入口参数: elementname 元素的名字
'出口参数: 无
'------------------------------------------------
function DeleteXmlNodeText(elementname)
XMLMorntekDocument.selectSingleNode("//"&elementname).text =""
end function
%>
 

### 使用 C# 发送接收 XML 数据 #### 构建 Web API 控制器来处理 HTTP 请求响应 Web API 控制器可以通过返回 `IActionResult` 或其派生类型(如 `OkObjectResult`, `BadRequestResult` 等)来发送 HTTP 响应[^1]。为了实现这一点,首先需要设置一个能够接受 POST 请求的方法,并配置该方法解析传入的 XML 数据。 对于接收 XML 数据的情况,在 ASP.NET Core 中可以利用 `[FromBody]` 属性配合自定义输入格式化程序或默认支持的 XML 序列化机制。下面展示了一个用于接收 XML 的控制器动作示例: ```csharp using Microsoft.AspNetCore.Mvc; // ... other usings ... [ApiController] [Route("[controller]")] public class XmlDataController : ControllerBase { [HttpPost] public IActionResult Post([FromBody] Person person) { if (!ModelState.IsValid || person == null) return BadRequest(); // Process the received 'person' object here... return Ok(new { Message = "Person data successfully processed." }); } } ``` 此代码片段假设存在名为 `Person` 的模型类,它已经被适当地标记以便于 XML 反序列化[^2]。 #### 定义可被序列化的对象结构 要使 .NET 能够正确地将接收到的数据映射到强类型的实例上,必须确保目标类具有适当的属性装饰符。例如,如果希望从客户接收到如下形式的 XML 文档,则应该像这样设计 `Person` 类: ```xml <Person> <Name>John Doe</Name> <Age>30</Age> </Person> ``` 对应的 C# 类定义如下所示: ```csharp using System.Xml.Serialization; [XmlRoot("Person")] public class Person { [XmlElement("Name")] public string Name { get; set; } [XmlElement("Age")] public int Age { get; set; } } ``` #### 向服务器端提交 XML 并获取响应 当准备向上述 Web API 提交 XML 数据时,可以选择多种方式完成这一任务。这里给出一种基于 HttpClient 的简单例子,展示了怎样构建请求消息体并将结果作为字符串打印出来: ```csharp using System.Net.Http; using System.Text; using System.Threading.Tasks; class Program { private static async Task Main(string[] args) { var client = new HttpClient(); var xmlContent = @"<Person><Name>Jane Smith</Name><Age>28</Age></Person>"; HttpContent content = new StringContent(xmlContent, Encoding.UTF8, "application/xml"); HttpResponseMessage response = await client.PostAsync("https://example.com/api/XmlData", content); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } } ``` 这段代码会构造一条包含特定 XML 内容的消息,并将其发送给指定 URL 上的服务端点;之后再读取服务端返回的内容并显示在控制台上。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值