我有一个XML文件,其中有几个节点具有相同的标识号id1
,id2
,id3
。我想计算具有相同ID的节点,其中包含特定属性attr = "ATR"
。
<ROOT>
<Node id="id1" att="Non" >
</Node >
<Node id="id1" att="-" >
</Node >
<Node id="id1" att="ATR" >
</Node >
<Node id="id1" att="ATR" >
</Node >
<Node id="id2" att="Non" >
</Node >
<Node id="id2" att="Non" >
</Node>
<Node id="id2" att="ATR" >
</Node >
</ROOT>
结果应显示在表格中
id1 2
id2 1
答案 0 :(得分:0)
这是一个如何阅读XML内容并在html页面中显示它的示例:
<body>
<table>
<tr>
<td>id1</td>
<td id="id1"></td>
</tr>
<tr>
<td>id2</td>
<td id="id2"></td>
</tr>
</table>
</body>
ajax请求:
$.ajax({
type: "GET",
url: "main.xml",
dataType: "xml",
success: function (xml) {
var xmlDoc = $.parseXML(xml), $xml = $(xmlDoc);
var data = xml.firstChild.children;
var id1 = 0;
var id2 = 0;
for (var i= 0; i< data.length; i++){
if ($(data[i]).attr('att') === "ATR"){
$(data[i]).attr('id') == "id1" ? id1++ : id2++;
}
}
document.getElementById("id1").innerHTML = id1;
document.getElementById("id2").innerHTML = id2;
}
});
答案 1 :(得分:0)
XSLT 2.0有distinct-values()
有助于:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="d" select="/"/>
<xsl:for-each select="distinct-values(//*[@att='ATR']/@id)">
<xsl:variable name="curId" select="."/>
<xsl:value-of select="concat($curId,' ',count($d//*[@att='ATR' and @id = $curId]))"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XSLT 2.0缺少distinct-values()
,但xsl:key
和generate-id()
可以帮助迭代唯一值:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="idattr" match="//*[@att='ATR']/@id" use="." />
<xsl:template match="/">
<xsl:for-each select="//*[@att='ATR']/@id[generate-id() =
generate-id(key('idattr', .)[1])]">
<xsl:variable name="curId" select="."/>
<xsl:value-of select="concat($curId, ' ', count(//*[@att='ATR' and @id = $curId]))"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
以上两种解决方案都会生成
id1 2
id2 1
根据要求。