0

我希望获得所有 Boxers 的列表,这些 Boxers 是 Group 的直接子代。

XML 由外部源提供。我无法控制其内容或格式。

Boxer 标签通过 Match 标签被用作 Group 的直接子代和 Group 的孙代。

<Round PhaseID="2" ID="Round 1">
    <Boxer REF="2"/>
    <Boxer REF="3"/>
    <Boxer REF="4"/>
    <Boxer REF="1"/>

    <Group ID="1">
      <Boxer REF="1" NumInGroup="2" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
      <Boxer REF="4" NumInGroup="1" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
      <Match ID="1">
        <Boxer REF="1"/>
        <Boxer REF="4"/>
      </Match>
      <Match ID="2">
        <Boxer REF="4"/>
        <Boxer REF="1"/>
      </Match>
    </Group>
    ...
</Round>

当我使用

var groups = competitionDoc.getElementsByTagName("Group");  
var boxers = groups[0].getElementsByTagName("Boxer");

我得到了名为“Boxer”的所有 6 个标签的列表,它们是 Group 标签的后代。

我如何只获得 Group 的两个直接孩子?

4

1 回答 1

0

当我遍历 group[g].getElementsByTagName("Boxer") 返回的所有元素时,我将 parentElement 信息转换为字符串,然后我可以使代码以第一个子字符串为条件。

将 groupBoxers[gb].parentElement 转换为字符串:

groupBoxers[gb].parentElement.outerHTML

返回,例如

<Group ID="1">
  <Boxer REF="1" NumInGroup="2" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
  <Boxer REF="2" NumInGroup="1" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>

  <Match ID="1">
    <Boxer REF="1"/>
    <Boxer REF="2"/>
  </Match>

</Group>

然后我遍历 group[g].getElementsByTagName("Boxer") 返回的所有元素,我可以

  if (groupBoxers[gb].parentElement.outerHTML.substring(1,6) == "Group") {
     // do something with this Boxer - it is a direct child of a Group
  }   
于 2017-10-14T10:51:03.603 回答