首页 > 解决方案 > 计算在 XML 文件中有多少父节点具有相同的标记“值”

问题描述

我目前有一个 javascript 函数,可以通过特定标签计算我有多少元素,这很容易。我还想知道是否还有一种简单的方法来计算包含标签内部值的元素(或父元素)的数量。

我的 XML 文件的设置与此类似,每个 3 级嵌套都有相同的标签:

<GAMECATALOG>
  <PS4>
    <SHOOTER>
      <NAME>Shootergame</NAME>
      <PRODUCER>Microsoft</PRODUCER>
    </SHOOTER>
    <SHOOTER>
      <NAME>Shootergame2</NAME>
      <PRODUCER>UbiSoft</PRODUCER>
    </SHOOTER>
    <HORROR>
      <NAME>Horrorgame</NAME>
      <PRODUCER>UbiSoft</PRODUCER>
    </HORROR>  
  </PS4>
  <XBOX>
    <ADVENTURE>
      <NAME>Shootergame</NAME>
      <PRODUCER>Microsoft</PRODUCER>
    </ADVENTURE>
    <RPG>
      <NAME>Horrorgame</NAME>
      <PRODUCER>UbiSoft</PRODUCER>
    </RPG>       
  </XBOX>
</GAMECATALOG> 

示例 JavaScript 代码:

var numOfPs4 = xmlDoc.getElementsByTagName("PS4")[0].children.length;
var numOfXbox = xmlDoc.getElementsByTagName("XBOX")[0].children.length;
var totalGames = numOfShooters + numOfAdventure;

//find the total number of each of the game types within PS4
var numOfShooters = xmlDoc.getElementsByTagName("SHOOTER").length;
var numOfHorrors = xmlDoc.getElementsByTagName("HORROR").length;


//find the total number of each of the game types within XBOX
var numOfAdventure = xmlDoc.getElementsByTagName("ADVENTURE").length;
var numOfRpg = xmlDoc.getElementsByTagName("RPG").length;


// count the number of games of a specific producer
var numOfUbiSoft = ???

现在我的 XML 比这个长得多,但一切都正确计数。现在我只需要能够在生产者标签中找到有多少元素包含 UbiSoft 的值。这些标签的父母或者只是值在文档中出现的次数,在这个例子中应该给我 3。

标签: javascriptxml

解决方案


尝试:

const producers = xml.getElementsByTagName("PRODUCER");
const numUbiSoft = Array.from(producers).filter((producer) => producer.innerHTML === 'UbiSoft').length; 

推荐阅读