使用XSL的多个属性的XML组

时间:2015-07-07 15:51:38

标签: xml xslt

XSL文件按警报对报告进行分组,并将其用作唯一标识符。但是,它应该按站点名称+警报进行分组。网站具有名称属性:

<site name="http://192.168.56.110" host="192.168.56.110" port="80" ssl="false">

这是因为多个站点可能具有相同的警报。但是这个警报只会出现在一个网站下面。有关如何修改代码的任何建议,以便警报按警报和站点分组?

目前XSL看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"  encoding="utf-8" indent="yes" />


<xsl:template match="/Report">
  <Report><xsl:copy-of select="@*" />
  <reportname>
    <xsl:value-of select="reportname"/>
  </reportname>
  <reportdesc>
    <xsl:value-of select="reportdesc"/>
  </reportdesc>
  <xsl:for-each select="site">
    <site><xsl:copy-of select="@*" />
      <alerts>
        <xsl:key name="alertByAlert" match="alertitem" use="concat(alert)" />
        <xsl:for-each select="alerts/alertitem[generate-id() = generate-id(key('alertByAlert',alert))]">
          <alertitem>
              <alert>
                <xsl:value-of select="alert"/>
              </alert>
              <riskcode>
                <xsl:value-of select="riskcode"/>
              </riskcode>
              <riskdesc>
                <xsl:value-of select="riskdesc"/>
              </riskdesc>

              <xsl:for-each select="key('alertByAlert', alert)">
                <uri>
                  <xsl:value-of select="uri"/>
                </uri>
                <param>
                  <xsl:value-of select="param"/>
                </param>  
                <attack>
                  <xsl:value-of select="attack"/>
                </attack>            

              </xsl:for-each>
            </alertitem>
        </xsl:for-each>
      </alerts>
     </site>
   </xsl:for-each >

  </Report>
</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

将您的密钥更改为

Data.getOrder(2)
    .success(function(data) {
         $scope.contactList = data;
    })
    .error(function(err) {
         // Handle the error.
    })
    .then(processData);

function processData() {
    angular.forEach($scope.contactList, function(value, index) {
        alert(value.amount);
    });
}

(并将其作为<xsl:key name="k1" match="alertitem" use="concat(ancestor::site/@name, '|', alert)" /> 的孩子,在其他地方不允许)。

然后你可以在

中使用该键
xsl:stylesheet