HTML输出不符合预期

时间:2015-02-20 09:33:19

标签: xml xslt-1.0

我有以下XML:

<page id="12095325">
 <name>DUMMY TEST</name>
 <description>Includes in- & outbound dial statistics</description>
 <server>reg6699cic01</server>
 <created>2015/02/19 11:57:05 AM</created>
 <adhocmessage/>
<workgroups>
<workgroup>
 <name>SSC_UK_Office_All</name>
 <agents>24</agents>
 <agentsavailable>0</agentsavailable>
 <agentsloggedin>16</agentsloggedin>
 <longestavailable>-</longestavailable>
 <longestoutbound>4d 09:38:18</longestoutbound>
 <longestinbound>00:00:34</longestinbound>
 <longestnonacd>-</longestnonacd>
 <numbernonacd>0</numbernonacd>
 <numberoninbound>1</numberoninbound>
 <numberoninboundinacw>3</numberoninboundinacw>
 <numberonoutbound>4</numberonoutbound>
 <numberonoutboundinacw>1</numberonoutboundinacw>
 <agentstatus/>
 </workgroup>
 </workgroups>
<agentstats>
<agent>
 <name>Aaron.House</name>
 <firstname>Aaron</firstname>
 <lastname>House</lastname>
 <extension>902030</extension>
<station/>
 </agent>
  </agentstats>
  </page>

当我应用与<agentstats>匹配的模板时,我确实从整个xml而不是agentstats部分获取信息?

我试着理解为什么。 这是xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-    prefixes="msxsl">

  <xsl:param name="row-count" select="3"/>
  <xsl:output method="html" encoding="utf-8" indent="yes"/>

  <xsl:template match="agentstats">
<!--    <xsl:call-template name="agents"/>     -->
  </xsl:template>

  <xsl:template name="agents">
    <table border="1">
        <tr>
          <td>Agent Name</td>
          <td>Station</td>
          <td>Status</td>
    </tr>
  <xsl:for-each select="agent">
    <tr>  
      <td><xsl:value-of select="name"/></td>
      <td><xsl:value-of select="station"/></td>
      <td><xsl:value-of select="currentstatus"/></td>
    </tr>      
    </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

这是产生的输出:

enter image description here

我不希望看到第一行:

DUMMY TEST Includes in- & outbound dial statistics reg6699cic01 2015/02/19 11:57:05 AM SSC_UK_Office_All 24 0 16 - 4d 09:38:18 00:00:34 - 0 1 3 4 1 

,而只是表格

有什么想法在这里发生了什么? 此致

2 个答案:

答案 0 :(得分:0)

首先,您的xml和xslt文件有2个问题(正如几位评论员指出的那样):

  • (xml):需要对&进行编码:&#x26;
  • (xslt):属性名称不能包含空格(根元素中为exclude-result-prefixes="msxsl"

回到手头的问题:其中一个默认模板似乎适用。您可以指定一个不同的默认模板来处理text() - 不做任何事情而不是复制:

    <!-- ... your stylesheet --> 
    <xsl:template match="text()"/>
</xsl:stylesheet>

有关xslt中默认模板的详细信息,请查看this SO answer

顺便说一句,根据你的输出,你发布的xml是完整的吗?

答案 1 :(得分:0)

您看到的内容很可能是built-in template rules被应用的结果。我说“最有可能”,因为正如评论中指出的那样,您的问题无法使用您发布的代码重现。

您实际执行任何操作的唯一模板是:

      <xsl:template match="agentstats">
<!--    <xsl:call-template name="agents"/>     -->
  </xsl:template>

它抑制agentstats节点中的任何内容及其后代出现在输出中。因此,您没有看到例如“Aaron.House”文本。

所有其他节点都由默认的内置模板处理,该模板复制文本(只复制文本)。