2016-05-11 5 views
0

У меня есть этот пример XML-данные (вырубленные к основам):Форматировать текстовый узел как дату с использованием XML и XSL?

<?xml version="1.0" encoding="UTF-8"?> 
<AssignmentHistory Version="1610"> 
    <W20160104> 
     <Chairman>Name1</Chairman> 
    </W20160104> 
    <W20160111> 
     <Chairman>Name2</Chairman> 
    </W20160111> 
</AssignmentHistory> 

Он содержит список WYYYYNNDD узлов. На данный момент я доступ к этому списку в XSL сценарии, как это (опять же, это урезанная пример):

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes" version="4.01" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/> 
    <xsl:template match="/"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
     <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
     <!--<link rel="stylesheet" type="text/css" href="Workbook-off.css"/>--> 
     <title>Custom Report</title> 
     </head> 
     <body> 
     <xsl:variable name="AssignHistory" select="document('AssignHistory.xml')"/> 
     <xsl:for-each select="$AssignHistory/AssignmentHistory/*"> 
      <xsl:apply-templates select="Chairman"></xsl:apply-templates> 
     </xsl:for-each> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="Chairman"> 
    <p> 
     <xsl:text>Chairman: </xsl:text> 
     <xsl:value-of select="."/> 
    </p> 
    </xsl:template> 
</xsl:stylesheet> 

То, что я хочу сделать, это во время цикла for-each преобразовать содержимое "." (который будет будь то значение WYYYYMMDD) и отобразите его как стандарт короткая дата (например, dd/mm/yyyy).

Я не уверен, как это сделать. Благодарим вас за руководство этим вопросом. Это ценно.

Ожидаемый результат:

04/01/2016 
Chairman: Name1 
11/01/2016 
Chairman: Name2 

В конце концов все изменится и становятся все более сложными.

+1

Параметр '.' контекста узла внутри вашего' для-each' элемент, имя которого в формате так, используя 'локальный_файл имя()' даст вы, например, 'W20160104', и затем вы можете извлечь компоненты с помощью' substring' и контактировать их при необходимости с 'concat'. –

+0

Пожалуйста, опубликуйте ожидаемый результат. –

+0

P.S. Поставщику данных необходимо научиться не помещать данные в разметку. –

ответ

1

Это довольно тривиально - попробуйте:

<xsl:template match="Chairman"> 
    <xsl:variable name="datestr" select="name(..)" /> 
    <p> 
     <xsl:value-of select="substring($datestr, 8, 2)"/> 
     <xsl:text>/</xsl:text> 
     <xsl:value-of select="substring($datestr, 6, 2)"/> 
     <xsl:text>/</xsl:text> 
     <xsl:value-of select="substring($datestr, 2, 4)"/> 
     <br/> 
     <xsl:text>Chairman: </xsl:text> 
     <xsl:value-of select="."/> 
    </p> 
</xsl:template> 
Смежные вопросы