搜索给定值的相似元素列表
Searching a list of similar elements for a given value
我有一些 XML 这样的:
<Team ...some attributes...>
<Name>My Team</Name>
<Player uID="player1">
<Name>Name</Name>
<Position>Goalkeeper</Position>
<Stat Type="first_name">Name</Stat>
<Stat Type="last_name">Last</Stat>
<Stat Type="birth_date">bday</Stat>
<Stat Type="birth_place">bplace</Stat>
<Stat Type="weight">84</Stat>
<Stat Type="height">183</Stat>
<Stat Type="jersey_num">1</Stat>
</Player>
<Player uID="player2">
...
</Player>
...
</Team>
我想通过 jersey_num
搜索玩家。我正在使用 Nokogiri,这段代码让我有点接近:
feed.xpath("/Team[@uID='#{team_uid}']//Player/Stat[@Type='jersey_num']")
那个returns一个给定球队的所有球员,以及他们的球衣号码属性行的数组,但是我想找到一个给定球衣号码的球员,然后拉它uID
.
我可以用 ancestor 做到这一点,但首先我需要这个搜索只产生一个匹配的玩家。我意识到目前我没有在搜索它,但我不确定如何根据 Stat Type
语法进行搜索。
这可行,但我希望有更好的方法:
jersey_number = '23'
players = feed.xpath("/Team[@uID='#{team_uid}']//Player")
player = players.xpath("//Stat[@Type='jersey_num']").detect do |jersery|
jersery.text == jersey_number
end
player
#=>#<Nokogiri::XML::Element:0x95e8f4 name="Stat" attributes=[#<Nokogiri::XML::Attr:0x9407dc name="Type" value="jersey_num">] children=[#<Nokogiri::XML::Text:0x940048 "23">]>
"... but I want to find a player with a given jersey number, and then pull its uID"
那么 xpath 参数应该如下所示:
/Team[@uID='#{team_uid}']//Player[Stat[@Type='jersey_num' and .='#{jersey_num}']]/@uID
或者可能没有尾随 /@uID
来获取 Player
元素,然后从 ruby 代码中进一步提取。请注意,上述 xpath 中的 Stat[....]
部分通过 Type
属性值和元素本身的值过滤 Stat
元素。
我有一些 XML 这样的:
<Team ...some attributes...>
<Name>My Team</Name>
<Player uID="player1">
<Name>Name</Name>
<Position>Goalkeeper</Position>
<Stat Type="first_name">Name</Stat>
<Stat Type="last_name">Last</Stat>
<Stat Type="birth_date">bday</Stat>
<Stat Type="birth_place">bplace</Stat>
<Stat Type="weight">84</Stat>
<Stat Type="height">183</Stat>
<Stat Type="jersey_num">1</Stat>
</Player>
<Player uID="player2">
...
</Player>
...
</Team>
我想通过 jersey_num
搜索玩家。我正在使用 Nokogiri,这段代码让我有点接近:
feed.xpath("/Team[@uID='#{team_uid}']//Player/Stat[@Type='jersey_num']")
那个returns一个给定球队的所有球员,以及他们的球衣号码属性行的数组,但是我想找到一个给定球衣号码的球员,然后拉它uID
.
我可以用 ancestor 做到这一点,但首先我需要这个搜索只产生一个匹配的玩家。我意识到目前我没有在搜索它,但我不确定如何根据 Stat Type
语法进行搜索。
这可行,但我希望有更好的方法:
jersey_number = '23'
players = feed.xpath("/Team[@uID='#{team_uid}']//Player")
player = players.xpath("//Stat[@Type='jersey_num']").detect do |jersery|
jersery.text == jersey_number
end
player
#=>#<Nokogiri::XML::Element:0x95e8f4 name="Stat" attributes=[#<Nokogiri::XML::Attr:0x9407dc name="Type" value="jersey_num">] children=[#<Nokogiri::XML::Text:0x940048 "23">]>
"... but I want to find a player with a given jersey number, and then pull its uID"
那么 xpath 参数应该如下所示:
/Team[@uID='#{team_uid}']//Player[Stat[@Type='jersey_num' and .='#{jersey_num}']]/@uID
或者可能没有尾随 /@uID
来获取 Player
元素,然后从 ruby 代码中进一步提取。请注意,上述 xpath 中的 Stat[....]
部分通过 Type
属性值和元素本身的值过滤 Stat
元素。