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):
&
需要编码: &
.
- (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".
所有其他节点均由默认内置模板处理,该模板复制文本(且仅复制文本)。
我有以下 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):
&
需要编码:&
. - (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".
所有其他节点均由默认内置模板处理,该模板复制文本(且仅复制文本)。