我有以下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
,而只是表格
有什么想法在这里发生了什么? 此致
答案 0 :(得分:0)
首先,您的xml和xslt文件有2个问题(正如几位评论员指出的那样):
&
进行编码:&
。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”文本。
所有其他节点都由默认的内置模板处理,该模板复制文本(只复制文本)。