Вы можете попробовать следующий код XSLT-1.0.Конечно, вам нужно настроить некоторые пути к фактическому макету файла.
<xsl:for-each select="table/tbody/tr">
<!-- Getting other data here-->
<xsl:for-each select="td">
<xsl:variable name="pos" select="position()" />
<xsl:value-of select="../../../thead/tr/th[$pos]"/> <!--Looking for the column name here-->
<xsl:value-of select="concat(': ',.)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
Переменная сохраняет текущую позицию в наборе элементов td
и использует ее как индекс для элементов th
,Доступ к элементам th
осуществляется по относительному пути;абсолютный путь может быть лучше, но это зависит от макета файла и от того, имеете ли вы дело с несколькими таблицами или только с одной.
Его вывод:
Allergy Name: MUCINEX D
Reaction Description: Hallucinations
Start Date: 2015/11/19
Severity: Critical
Status: Active
Provider: Mickey Mouse, MD
В качестве альтернативы вы можете использовать xsl:key
с небольшим фокусом.Возможно, это быстрее, но неудобно с несколькими таблицами.
Однако вот так может выглядеть таблица стилей:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" />
<xsl:key name="hdr" match="tr/th" use="count(preceding-sibling::th) + 1" />
<xsl:template match="/text">
<xsl:for-each select="table/tbody/tr">
<!-- Getting other data here-->
<xsl:for-each select="td">
<xsl:value-of select="key('hdr',position())" />
<xsl:value-of select="concat(': ',.)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Вывод один и тот же.