计算XML文件中有多少个父节点具有相同标签的“值”

时间:2018-08-15 08:06:52

标签: javascript 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。

2 个答案:

答案 0 :(得分:1)

尝试:

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

答案 1 :(得分:0)

以下几行应该可以起作用:

var producers = xmlDoc.getElementsByTagName("PRODUCER");
var numOfUbiSoft = 0;
for(var i = 0; i < producers.length; i++) {
    var producer = producers[i];

    if ("UbiSoft" === producer.nodeValue) {
        numOfUbiSoft++;
    }
}