2015-11-05 3 views
-1

У меня есть XML-файл, который я должен преобразовать в html-файл с помощью XSL.XSL: функция «для каждого выбора» работает неправильно

Мой XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="test.xsl" ?> 
<Company> 

<SectionA> 
    <Employee>Peter Barry</Employee> 
    <Employee>Lisa Stewart</Employee> 
    <Employee>Harry Rogers</Employee> 
</SectionA> 

<SectionB> 
    <Employee>Tom Riddle</Employee> 
</SectionB> 

</Company> 

В моем HTML-файла вывод должен выглядеть следующим образом: "Питер Барри, Лиза Стюарт, Гарри Роджерс".

Проблема в том, что для каждой функции в этом случае не работает! Мой код в XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<html> 
<body> 

<h2>All</h2> 

<table> 

<td> 
    <xsl:for-each select="Company/SectionA"> 
    <xsl:value-of select="Employee"/> 
    </xsl:for-each> 
</td> 


</table> 


</body> 
</html> 
</xsl:template> 

</xsl:stylesheet> 

В HTML это только показывает имя первого сотрудника (то есть «Питер Барри»). Как я получу это право, чтобы показать каждый элемент?

+0

Пожалуйста показать ** воспроизводимый ** пример. Мы не можем сказать, что делает ваш код, не зная, в каком контексте он выполняется. Тем не менее, пустой 'xsl: for-each' ничего не сделает. Поместите что-нибудь в него, например. 'XSL: Значение-of'. - Также, пожалуйста, покажите свой ожидаемый результат ** как код **. –

+0

Извините, я сейчас вставляю оба кода в мой пост! –

+0

Кстати, '' элементы должны находиться внутри ''. – Flynn1179

ответ

0

Если вы хотите строку для каждого сотрудника в Разделе А, чем использование:

<xsl:template match="/"> 
    <table> 
     <xsl:for-each select="Company/SectionA/Employee"> 
      <tr><td><xsl:value-of select="."/></td></tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

, как вы есть сейчас, вы находитесь в контексте SectionA и <xsl:value-of select="Employee"/> возвращает значение первого только для дочернего сотрудника - вот как это работает в XSLT 1.0. Кроме того, вы создаете только одну ячейку таблицы и без строк.

1

Использование для-каждого не лучший вариант в данном случае, было бы лучше, чтобы определить шаблон для обработки каждого сотрудника, как это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>All</h2> 
     <xsl:apply-templates select="Company/SectionA"/> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="SectionA"> 
    <table> 
     <xsl:apply-templates/> 
    </table> 
    </xsl:template> 

    <xsl:template match="Employee"> 
    <tr> 
     <td><xsl:value-of select="."/></td> 
    </tr> 
    </xsl:template>   
</xsl:stylesheet> 
Смежные вопросы