如何比较xml文件中的两个元素?
因此,我有以下xml文件:如何比较xml文件中的两个元素?,xml,xquery,Xml,Xquery,因此,我有以下xml文件: <!DOCTYPE music SYSTEM "music.dtd"> <music> <songs> <song sid = "s1" time = "2:04" year = "1994"> <title>Thriller </title> <artist>Michael </artist> <composers>
<!DOCTYPE music SYSTEM "music.dtd">
<music>
<songs>
<song sid = "s1" time = "2:04" year = "1994">
<title>Thriller </title>
<artist>Michael </artist>
<composers>
<composer>Michael</composer>
</composers>
<album> Thriller album</album>
</song>
<song sid = "s2" time = "2:00" year = "1999">
<title> Billy </title>
<artist> Thomas </artist>
<composers>
<composer> Rick </composer>
</composers>
<album> The one </album>
</song>
<song sid = "s3" time = "1:50" year = "2000">
<title> Down </title>
<artist> PJ </artist>
<composers>
<composer>Jerry </composer>
</composers>
<album>Forty </album>
</song>
</songs>
<playlists>
<playlist pid = "p1" creator = "Tom">
<track sid = "s1"/>
</playlist>
</playlists>
</music>
惊悚片
迈克尔
迈克尔
惊悚专辑
比利
托马斯
瑞克
那个
向下
PJ
杰瑞
四十
我想做的是从不在播放列表中的歌曲中获取所有sid
因此,在这个xml文件中,我希望返回的查询是sid:s2和s3,因为这两个都不在播放列表中,而且s1在播放列表中,所以不应该返回
我正在尝试使用此查询:
for $x in doc("music.xml")/music/songs/song/@sid
return <sid>{data($x)}</sid>
文件中的$x(“music.xml”)/music/songs/song/@sid
返回{data($x)}
我试图将结果存储在一个变量中,以便稍后将其与另一个查询进行比较,该查询将遍历播放列表,但我对如何将查询结果存储到变量中有点迷茫。有什么帮助吗?谢谢。您可以使用
let
子句在查询中绑定变量。下面是一个包含多个中间变量的示例:
let $doc := doc("music.xml")/music
let $in-pl := $doc/playlists/playlist/track
let $not-in-pl := $doc/songs/song[fn:not(@sid = $in-pl/@sid)]
for $x in $not-in-pl/@sid
return <sid>{data($x)}</sid>
也可以使用XQuery元素/属性构造函数:
return
element noplaylist {
for $x in $not-in-pl/@sid
return
element sid {
attribute sid { data($x) }
}
}
嗯..所以我试了一下:
for $x in doc("music.xml")/music/songs/song/@sid
where $x != doc("music.xml")//playlists/playlist/track/@sid
return <sid>{data($x)}</sid>
文件中的$x(“music.xml”)/music/songs/song/@sid
其中$x!=doc(“music.xml”)//playlists/playlist/track/@sid
返回{data($x)}
我不确定这是否是巧合,但现在有意义了。这也行!如果要在变量中捕获该表达式的结果,请在其前面添加
let$results:=
,并在其后面添加return$results
(或其他表达式)。XQuery非常灵活;)看来你的问题被打断了。我该怎么回答呢?谢谢你接受我的回答!我添加了一些元素构造的示例
for $x in doc("music.xml")/music/songs/song/@sid
where $x != doc("music.xml")//playlists/playlist/track/@sid
return <sid>{data($x)}</sid>