2013-09-12 2 views
0

Я пытаюсь создать супер универсальный XSLT, который в основном может рассчитывать только на таблицу элементов &. У меня есть следующий пример XML Я пытаюсь сделать XSLT для:XSLT перечисляет каждый дочерний элемент

<?xml version="1.0" encoding="UTF-8"?> 
<table> 
    <row> 
     <id>5311</id> 
     <status>Active</status> 
     <id_vendor>Verizon</id_vendor> 
     <mobile_number>555123456</mobile_number> 
    </row> 
    <row> 
     <id>5312</id> 
     <status>Inactive</status> 
     <id_vendor>Sprint</id_vendor> 
     <mobile_number>555123457</mobile_number> 
    </row> 
    <row> 
     <id>5313</id> 
     <status>Active</status> 
     <id_vendor>ATT</id_vendor> 
     <mobile_number>555123458</mobile_number> 
    </row> 
</table> 

Проблема заключается в том, что я не знаю, что поля собираются в конечном итоге (идентификатор, статус, id_vendor, mobile_number и т.д. все могут изменяться

Я хочу сделать приятно смотреть на взгляд, такие как:.

<div style="background-color:#E3CA87;padding:.2em"> 
    <div style="background-color:#F1E2BB;padding:.2em"> 
     <div>id: x<div> 
     <div>status: active<div> 
     <div>id_vendor: Verizon<div> 
     <div>mobile_number: 555123456<div> 
    <div> 
<div> 

Вот что я до сих пор .. но я не могу получить анонимные элементы ладится:

<?xml version="1.0" encoding="UTF-8"?> 
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> 
    <body style="background-color:#eee;font-size:12pt;font-family:Arial;"> 
    <xsl:for-each select="table/row"> 
     <div style="background-color:#eee;padding:.5em"> 

     <xsl:for-each select="/*"> 

     <div style="background-color:#E3CA87;padding:.2em;border: 1px solid black"> 
     <xsl:for-each select="./*"> 
      <div style="background-color:#F1E2BB;padding:.2em"> 
<xsl:value-of select ="name(./*)"/>: 
<xsl:value-of select="*" /> 
      </div> 
     </xsl:for-each> 
     </div> 
    </xsl:for-each> 
     </div> 
    </xsl:for-each> 
    </body> 
</html> 
+0

После редактирования вы должны отказаться от '', тогда вы можете сократить 'до '', а затем вам нужно использовать '' и ''. –

ответ

1

Закрыть ... но это было на самом деле немного различный .. только понял это для тех, кто хочет знать:

<?xml version="1.0" encoding="UTF-8"?> 
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> 
    <body style="background-color:#eee;font-size:12pt;font-family:Arial;"> 
    <xsl:for-each select="table/row"> 
     <div style="background-color:#eee;padding:.5em"> 

     <xsl:for-each select="."> 

     <div style="background-color:#E3CA87;padding:.2em;border: 1px solid black"> 
     <xsl:for-each select="."> 
<xsl:for-each select="./*"> 
      <div style="background-color:#F1E2BB;padding:.2em"> 
<xsl:value-of select="concat(local-name(.), ': ', .)" /> 
      </div>   
</xsl:for-each> 
     </xsl:for-each> 
     </div> 
    </xsl:for-each> 
     </div> 
    </xsl:for-each> 
    </body> 
</html> 
+0

Выбросьте 'for-each select =". "', Он ничего не делает, кроме мусора кода. –

0

Используйте относительные пути, например. <xsl:for-each select="*"> вместо <xsl:for-each select="/*">. Тогда я думаю, что вы хотите отказаться от внутренней для каждого, и просто заменить его

<div style="background-color:#F1E2BB;padding:.2em"> 
      <xsl:value-of select="concat(local-name(), ': ', .)" /> 
      </div> 
Смежные вопросы