HTML 输出不符合预期

HTML output not as expected

我有以下 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>

这是生成的输出:

我没想到会看到第一行:

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 

而是 table 只有

知道这里发生了什么吗? 问候

首先,您的 xml 和 xslt 文件有两个问题(正如几位评论者所指出的):

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

回到手头的问题:默认模板之一似乎适用。您可以为处理指定不同的默认模板 text() - 什么都不做而不是复制:

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

查看 this SO answer 了解 xslt 中默认模板的详细信息。

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

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

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

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

它会抑制 agentstats 节点及其后代中的任何内容出现在输出中。例如,您看不到文本 "Aaron.House".

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