如何解决如何对每个记录具有许多相同标签的xml文件进行迭代?
我正在使用旧的经典ASP系统,该系统从另一个最近更改了xml文件格式的系统接收xml文件。它包含我需要解析的视频库摘要。
按如下所示对xml进行采样:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<videodb>
<version>1</version>
<movie>
<title>3 Days to Kill</title>
<ratings>
<rating name="themoviedb" max="10" default="true">
<value>6.000000</value>
<votes>1416</votes>
</rating>
</ratings>
<plot>A dangerous international spy... blah blah blah</plot>
<runtime>113</runtime>
<mpaa>Rated PG-13</mpaa>
<id>tt2172934</id>
<uniqueid type="imdb" default="true">tt2172934</uniqueid>
<uniqueid type="tmdb">192102</uniqueid>
<genre>Action</genre>
<genre>Drama</genre>
<genre>Thriller</genre>
<genre>Crime</genre>
<year>2014</year>
<status></status>
<code></code>
<trailer></trailer>
<actor>
<name>Kevin Costner</name>
<role>Ethan Renner</role>
</actor>
<actor>
<name>Amber Heard</name>
<role>Vivi Delay</role>
</actor>
<dateadded>2014-12-21 14:31:07</dateadded>
</movie>
<movie>
<title>47 Ronin</title>
<ratings>
<rating name="themoviedb" max="10" default="true">
<value>6.000000</value>
<votes>2324</votes>
</rating>
</ratings>
<plot>Kai—an outcast—joins Oishi,the leader of 47 outcast samurai...blah blah blah</plot>
<runtime>119</runtime>
<mpaa>Rated PG-13</mpaa>
<playcount>1</playcount>
<lastplayed>2020-03-24</lastplayed>
<id>tt1335975</id>
<uniqueid type="imdb" default="true">tt1335975</uniqueid>
<uniqueid type="tmdb">64686</uniqueid>
<genre>Drama</genre>
<genre>Action</genre>
<genre>Adventure</genre>
<genre>Fantasy</genre>
<year>2013</year>
<trailer></trailer>
<actor>
<name>Keanu Reeves</name>
<role>Kai</role>
</actor>
<actor>
<name>Hiroyuki Sanada</name>
<role>Kuranosuke Ôishi</role>
</actor>
<dateadded>2014-12-21 22:15:42</dateadded>
</movie>
</videodb>
我的asp代码如下。...
Set objXMLDoc = Server.CreateObject("Microsoft.XMLDOM")
objXMLDoc.async = False
objXMLDoc.load Server.MapPath("/MovieLibrary/data/videodb.xml")
Dim xmlMovies
Set xmlMovies = objXMLDoc.documentElement.selectNodes("movie")
For Each xmlMovie In xmlMovies
'
Dim title:title = xmlMovie.selectSingleNode("title").text
Dim rating_value:rating_value = left(xmlMovie.selectSingleNode("ratings/rating/value").text,3)
Dim rating_votes:rating_votes = xmlMovie.selectSingleNode("ratings/rating/votes").text
Dim plot:plot = xmlMovie.selectSingleNode("plot").text
Dim runtime:runtime = xmlMovie.selectSingleNode("runtime").text
Dim mpaa_rating:mpaa_rating = xmlMovie.selectSingleNode("mpaa").text
Dim release_year:release_year = xmlMovie.selectSingleNode("year").text
Dim id:id = xmlMovie.selectSingleNode("id").text
Dim genre:genre = xmlMovie.selectSingleNode("genre").text
Dim date_added:date_added = xmlMovie.selectSingleNode("dateadded").text
Dim actor:actor = xmlMovie.selectSingleNode("actor/name").text
Response.Write Server.HTMLEncode(title) & " "
Response.Write Server.HTMLEncode(rating_value) & "/10 "
Response.Write Server.HTMLEncode(rating_votes) & "<br>"
Response.Write Server.HTMLEncode(plot) & "<br>"
Response.Write Server.HTMLEncode(runtime) & " Minutes "
Response.Write Server.HTMLEncode(mpaa_rating) & " "
Response.Write Server.HTMLEncode(release_year) & " "
Response.Write Server.HTMLEncode(id) & "<br> "
Response.Write Server.HTMLEncode(genre) & "<br>"
Response.Write Server.HTMLEncode(date_added) & "<br>"
Response.Write Server.HTMLEncode(actor) & "<br><br>"
Next
正如您在xml文件中看到的那样,每部电影可以具有多个“类型”条目和多个“演员”条目。我可以获得所有条目,但只能获得第一个“类型”条目和第一个“演员”条目。我在弄清楚如何为每部电影创建流派的子列表时遇到麻烦,因此我可以将它们推入课堂....而我只想抓住前2到3位演员,而不是27位演员
很显然,我需要为体裁和演员字段创建一个数组,但是我尝试返回的所有内容都带有诸如“此集合没有此方法”之类的东西。
我知道我的代码很乱,这是我创建的测试平台,目的是确保可以提取文件的新格式。
任何帮助将不胜感激。 (很长的帖子很抱歉)
解决方法
使用函数通过selectNodes Method
获取文本Function getNodeValue(nodename)
Dim NodeValue : NodeValue = ""
Dim Nodes
set Nodes = xmlMovie.selectNodes(nodename)
For each Node in Nodes
If NodeValue = "" Then
NodeValue = Node.Text
Else
NodeValue = NodeValue & "," & Node.Text
End If
Next
getNodeValue = NodeValue
End Function
这将返回一个逗号分隔的字符串。
现在您可以获取所有值,如:
Dim title:title = getNodeValue("title")
和
Dim genre:genre = getNodeValue("genre")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。