如何迭代每条记录具有许多相同标签的 xml 个文件?
How do I iterate xml files that have many of the same tag per record?
我正在使用旧的 classic 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 文件中看到的那样,每部电影都可以有多个“流派”条目和多个“演员”条目。我可以获得所有条目,但我只能获得第一个“流派”条目和第一个“演员”条目。我无法弄清楚如何为每部电影创建一个列出的流派的子列表,以便我可以将它们推入我的 class....我只想抓住前 2 或三个演员,不像某些人那样是 27。
显然我需要为流派和演员字段创建一个数组,但我尝试的所有操作都返回类似“此集合没有此方法”或什么都没有的内容。
我知道我的代码很乱,这是我创建的测试平台,以确保我可以提取文件的新格式。
如有任何帮助,我们将不胜感激。 (对不起长post)
使用函数获取文本使用 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
这将 return 逗号分隔的字符串。
现在您可以获得所有值,例如:
Dim title:title = getNodeValue("title")
和
Dim genre:genre = getNodeValue("genre")
我正在使用旧的 classic 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 文件中看到的那样,每部电影都可以有多个“流派”条目和多个“演员”条目。我可以获得所有条目,但我只能获得第一个“流派”条目和第一个“演员”条目。我无法弄清楚如何为每部电影创建一个列出的流派的子列表,以便我可以将它们推入我的 class....我只想抓住前 2 或三个演员,不像某些人那样是 27。
显然我需要为流派和演员字段创建一个数组,但我尝试的所有操作都返回类似“此集合没有此方法”或什么都没有的内容。
我知道我的代码很乱,这是我创建的测试平台,以确保我可以提取文件的新格式。
如有任何帮助,我们将不胜感激。 (对不起长post)
使用函数获取文本使用 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
这将 return 逗号分隔的字符串。
现在您可以获得所有值,例如:
Dim title:title = getNodeValue("title")
和
Dim genre:genre = getNodeValue("genre")