2015-02-20 3 views
0

У меня есть следующий XML:выход HTML не как ожидалось

<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 

, а скорее таблицу только

Любые идеи, что происходит здесь? С уважением

+0

Я бы не ожидал, что это вообще сработает, так как ваши входные данные не являются хорошо сформированным XML (он содержит неэкранированный '&' в 'описании'). –

+0

И ваш XSLT также искажен: 'exclude-result-prefixes' не является допустимым именем атрибута (содержит пробелы). –

ответ

0

Прежде всего, ваши XML и XSLT-файлы имеют 2 проблемы (как несколько commentors указали):

  • (XML): В & потребности должны быть закодированы: &#x26;.
  • (XSLT): Имена атрибутов не должны содержать пробелов (exclude-result-prefixes="msxsl" в корневой элемент)

Вернуться к рассматриваемой проблеме: один из шаблонов по умолчанию, кажется, относится. Вы можете указать другой шаблон по умолчанию для обработки text() - ничего не делать, вместо копирования:

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

Посмотрите this SO answer для подробной информации о стандартных шаблонов в XSLT.

Btw, учитывая ваш результат, является ли xml, который вы опубликовали?

+0

При добавлении первого (*) я ничего не получаю. – NiteOwls

+0

Ответ исправлен – collapsar

+0

Объявление XML является необязательным. –

0

То, что вы видите, скорее всего, является результатом применения built-in template rules. Я говорю «скорее всего», потому что, как было указано в комментариях, ваша проблема не может быть воспроизведена с использованием кода, который вы опубликовали.

Единственный шаблон, который у вас есть, что на самом деле делать что-либо, является:

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

Он подавляет ничего в agentstats узлов и их потомков от появления на выходе. Поэтому вы не видите, например, текст «Aaron.House».

Все остальные узлы обрабатываются встроенным шаблоном по умолчанию, который копирует текст (и только текст).

+0

Исправлено, я забыл не комментировать ту часть Но с обновленным ответом, а coned uncommented У меня есть ожидаемый результат – NiteOwls

+0

Спасибо всем за помощь! – NiteOwls

Смежные вопросы