搜索给定值的相似元素列表

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 元素。