如何迭代每条记录具有许多相同标签的 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")