ASP读取XML内容实例,有好几种方式的都可以读取呢!

ASP 2975 0 2013-05-09

ASP读取XML内容实例,有好几种方式的都可以读取呢!

这是本人测试通过的,大家拷过去就可以直接用哈!!!

ASP代码:
<%
dim xingzXML, xingzLayer, xingzLayerNum, xingzLayer2, xingzLayerNum2, xzi, xzk
Set xingzXML = server.CreateObject("MSXML.DOMDocument")
xingzXML.Load(Server.MapPath("test.xml"))  '加载一个XML文件

Set xingzLayer=xingzXML.documentElement  '确认XML文件的根节点,即第一个标签
xingzLayerNum=xingzLayer.ChildNodes.length-1  '获取第一个标签包括的子标签个数,从0算起

for xzi=0 to xingzLayerNum
set xingzLayer2=xingzLayer.childNodes.item(xzi)  '子标签
xingzLayerNum2=xingzLayer2.ChildNodes.length-1
    for xzk=0 to xingzLayerNum2
        response.Write xingzLayer2.childNodes.item(xzk).text  '获取子标签的字符
        response.Write "<br />"
    next
    response.Write "============================<br />"
next

Set xingzLayer2=Nothing
Set xingzLayer=Nothing
Set xingzXML=Nothing
%>

 

XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <row>
        <id>1</id>
        <name><![CDATA[哈喽吧]]></name>
        <url>网址:http://www.hilo8.com</url>
    </row>
    <row>
        <id>2</id>
        <name><![CDATA[阅读"test"]]></name>
        <url>网址:http://yuedu.hilo8.com</url>
    </row>
</root>

上一篇:ASP GetRows的用法详解及实例!

下一篇:asp中 on error resume next的用法

讨论数量:3

天涯网魂 3 杠 5 星2013-05-09 13:19:24

<% 
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 

function CloseXml(XMLMorntekDocument) 
 if IsObject(XMLMorntekDocument) then 
  set XMLMorntekDocument=nothing 
 end if 
end function 

function SelectXmlNodeText(elementname)  
     elementname="//"&elementname 
     temp=XMLMorntekDocument.selectSingleNode(elementname).text 
     selectXmlNodeText= server.htmlencode(temp)  
end function  

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  

function UpdateXmlNodeText(elementname,newelementtext)  
 dim element 
 set element=XMLMorntekDocument.selectSingleNode("//"&elementname) 
 element.text=newelementtext 
end function  

function DeleteXmlNodeText(elementname)  
 XMLMorntekDocument.selectSingleNode("//"&elementname).text ="" 
end function  
%>

天涯网魂 3 杠 5 星2013-05-09 12:58:23

详细解说ASP读取XML数据:

使用ASP操作的XML文件读写方法,订制自己的函数

XML文件如下:songlist.xml

<?xml version="1.0" encoding="gb2312"?> 
<!-- 注释:转贴请注明作者 --> 
<歌曲列表> 
<歌曲 歌名="Yesterday" 时间="1:53" 分级="5"/> 
<歌曲 歌名="Imagine" 时间="3:04" 分级="5"/> 
<歌曲 歌名="All You Need Is Love" 时间="3:52" 分级="4"/> 
<歌曲> 
<歌名>Come Together</歌名> 
<时间>4:18</时间> 
<分级>4</分级> 
</歌曲> 
<歌曲 演唱者="约翰列侬"> 
<歌名>Oh My Love</歌名> 
<时间>2:44</时间> 
<分级>5</分级> 
</歌曲> 
<最后一次修改 修改人="" 时间="">无修改内容</最后一次修改> 
</歌曲列表> 

------------------------------------------------------
这个例子应该可以充分展现XML比数据库更灵活的一面,虽然每一条记录都是存贮一首歌的歌名,时间,分级这三项信息,但我们有多种存贮方法可选,既可以把数据放在标记的属性里,也可以把数据放到下一级标记里显示,像上例那样,两者共存也没问题。同时,XML也没有规定当你第一条记录有多少列时,你第二条记录也一定要有那么列,就上例而言,我们完全可以再加一条歌曲记录,只指定歌名和时间而不分级。至于每一条记录的标签(如1-5条中的"歌曲"),可以重复也可以不同,你看,我就在最后加了一个完全与前面不同的"最后一次修改"标签。总之,XML在要求语法合法的同时也给了开发人员充足的自由,以前在数据库里要用几个表才能记录的事,我们现在可以通通放在一个XML中了。下面,我一步一步来演示如何读写其中的任何一个元素。 

首先,像打开数据库一样,我们也得打开我们的XML文件。像这样: 
Set rootXML = server.CreateObject("MSXML.DOMDocument") 
rootXML.load server.MapPath("XML/config.xml") 

“MSXML.DOMDocument是windows”的一个标准组件,每台机器上都有的,请放心使用。 

然后,为了能够操作文件里的各项数据,我们再建一个类似游标的变量root,并把它指向XML文件的根标记(也就是<歌曲列表>): 
Set root = rootXML.documentelement 

如果我们把XML文档看成是一个由一级一级的标记组成的树型结构,那现在,我们的root对象表示的就是文档的根标记,也就是第一级节点(一个XML文件中,根标记必须是唯一的)。所以我们设这么一个root对象就是为了更方便地访问下一级节点,以实现对XML的控制。 

就我们示例的这个XML文档而言,它的根标记是<歌曲列表>,它的下一级标记有6个,前五个都是以<歌曲>命名,最后一个是<最后一次修改>,虽然名字不同,但是他们都是同一性质,我们可以把它们一起视为这个XML树型结构的第二级节点。既然我们的root对象已经指向了第一级结点,好,现在 
就让我们站在第一级结点上来操作第二级结点。 

比如,我们要得到下一级节点的某个标记的文本内容,像<最后一次修改>无修改内容</最后一次修改>中的"无修改内容"这段文本。我们可以如下操作:
先确定该标记是这一级节点中的第几个,此例为6;好,确定后马上行动: 
text = root.childNodes.item(5).text 

“root.childNodes.item(5).text”这一句代码应该很好理解,用伪代码翻译过来就是“目录.子目录集合.集合中的第5个标记.标记的文本内容”,因为XML的元素索引是从0开始的,所以我们获取某个位置的标记时,一点要记着把位置数减1再执行操作,否则就会越界。比如我们要获取下一级节点的第一个标记的文本,我们就应该用“root.childNodes.item(0)”,而不是“root.childNodes.item(1)” 

为了方便,我们将“获取下一级标记的内容”这一操作写成函数,以便重用: 
Function getNodeText(ByVal nNode) 
getNodeText = root.childNodes.item(nNode).text 
End Function 

有了这个函数后,我们再要得到“无修改内容”时就只需用如下代码: 
text = getNodeText(5) 

既避免了出错,也减轻了输入工作。与之相反,修改下一级标记的内容的代码是: 
root.childNodes.item(nNode).text = 要修改成的字串,我们同样写成一个函数—— 
Function setNodeText(ByVal nNode, ByVal strNewNodeText) 
root.childNodes.item(nNode).text = strNewNodeText 
End Function 

现在,我们要将“无修改内容”改成“第一条记录已经更改”,就可以这样: 
setNodeText 5,"第一条记录已经更改" 

(修改后请用rootXML.Save(文件名)方法保存文件,以使修改生效。) 
OK!我们已经可以方便地对下一级标记的进行读取和修改了,好,下一个目标,标记的属性。 

我们先回顾一下我们的第二级节点中的第一个标记的内容: 
<歌曲 歌名="Yesterday" 时间="1:53" 分级="5"/> 
这是一种特殊表达方式,只有首标签<歌曲>,而没有尾标签</歌曲>,更没有夹在两个标签之间的文本内容,而直接以一个“/”结束。呵呵,我是个懒人,所以我比较偏向于这种省略尾标签的写法。但我们用这种省略写法的时候,我们就没法在首尾标签中添加数据了,更没法使用我们上面定义的两个函数。这时候,标记的属性给我们提供了存贮数据的唯一容器,上面这个标记中就存贮着3组属性,下面让我们来试着访问它: 
text = root.childNodes.item(0).attributes.item(0).value 

这段代码让text变量被赋予了"Yesterday"这个字串,不信你打印一下。用伪代码解释之: 
“目录.下一级目录.第0个标记.标记的属性集合.集合中的第0个属性.属性对应的值” 
废话少说,写成函数 
Function getAttValue(ByVal nNode, ByVal nAtt) 
getAttValue=root.childNodes.item(nNode).attributes.item(nAtt).value 
End Function 

以后就可以很方便地用text = getAttValue(0,0)得到下一级节点中第0个标记的第0个属性值了, 
属性也是从0开始索引,切记。 

至于修改属性,很简单,直接赋值既可,写成函数表示: 
Function setAttValue(ByVal nNode, ByVal nAtt, ByVal strNewAttValue) 
root.childNodes.item(nNode).attributes.item(nAtt).value=strNewAttValue 
End Function 

好,一旦我们发现“All You Need Is Love”这首歌太好听了,想把它的等级升成5,就可以这样做 
setAttValue 2,2,"5" 

最后,记得使修改生效,也就是在操作后使用rootXML.Save(文件名)这一方法。 

当能够读写一个XML文件的文本内容和属性值后,我想您也应该基本上能够用ASP熟练地操作XML文档元素了,赶快将这一技术用在你的ASP中吧!好,今天就写到这里,下次再写时我再附上删除属性、创建标记、添加标记、删除标记、复制标记、替换标记、按条件查询 等一些没讲完的操作。

天涯网魂 3 杠 5 星2013-05-09 12:57:10

另一个实例:
分别保存下面两段代码,一个保存为readxml.asp另一个保存为test.xml,放在同一个目录下面,调试程序即可,在程序里面我已经做了解释,读取代码可以做成一个readxml的函数,通过使用输入的参数而读取xml不同数据记录的不同的值。这段程序的改编来自互联网,有什么出入请见谅。

readxml.asp
以下是引用片段:
<%
dim xml,objNode,objAtr,nCntChd,nCntAtr
Set xml=Server.CreateObject("Microsoft.XMLDOM") 
xml.Async=False
xml.Load(Server.MapPath("test.xml")) 

Set objNode=xml.documentElement
nCntChd=objNode.ChildNodes.length-1

'这个可以定义asp读取xml文件的那一个值,通过传递这个值来确定读取的数据

for i=0 to nCntChd
set objAtr=objNode.ChildNodes.item(i)
nCntAtr=objAtr.Attributes.length-1

'历遍一条记录里面的所有的记录项,记录是从0开始的

for j=0 to nCntAtr
response.write objAtr.Attributes.item(j).Text&"<br>"
next
response.write "<br>"
next

Set objAtr=Nothing
Set objNode=Nothing 
Set xml=Nothing 
%>


test.xml
以下是引用片段:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<row ID="1" COMPNAME="过桥轩" ADDR="广东省广州市越秀区北京路" 邮编="510000" TEL="8620-8333" PRODSERV="经营面" 经济行业="粥粉面店" 省份="广东省" 地市="广州市" 区域="越秀区" visit="0" 优先级="9999999999" zhuangtai="最新"/>
<row ID="2" COMPNAME="周仔" ADDR="广东省广州市" 邮编="510000" TEL="8620-8330" PRODSERV="经营快餐饮食" 经济行业="快餐" 省份="广东省" 地市="广州市" 区域="越秀区" visit="0" 优先级="9999999999" zhuangtai="最新"/>
<row ID="3" COMPNAME="香菜馆" ADDR="广东省广州市越秀区" 邮编="510000" TEL="8620-837" PRODSERV="经营湘菜" 经济行业="湘菜" 省份="广东省" 地市="广州市" 区域="越秀区" visit="0" 优先级="9999999999" zhuangtai="最新"/>
</root>

'以下说明:====================================================
DOM的对象和方法的简略说明:
documentElement 属性      确认XML 文件的根(Root)节点。
selectSingleNode         传回第一个符合样式的节点。
loadXML 方法           加载一个XML 文件或字符串的片断。
haschildnodes 方法        如果指定的节点有一个或更多子节点,传回值为true。
createElement 方法        建立一个指定名称的元素。
AppendChild 方法         加上一个节点当作指定节点最后的子节点。
createCDATASection 方法     建立一个包含特定数据的CDATA。

请先登录再发表讨论。 2024-04-20

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链