Я работаю с некоторым XML, где узлы имеют много атрибутов, и я создаю файл FO PDF (отчет), используя XSL. Я пытаюсь создать шаблон, который принимает определенный атрибут на текущем узле, и создать fo:block
, который будет иметь некоторое базовое форматирование.
Вот шаблон, который создает большой список всех атрибутов и значений на одном узле.
XSL:
<xsl:template name="createAttributeAndValueList">
<xsl:param name="node" select="." />
<xsl:for-each select="$node/@*">
<fo:block>
<xsl:value-of select="concat(name(),': ')"/>
<xsl:value-of select="."/>
</fo:block>
</xsl:for-each>
</xsl:template>
Однако бывают случаи, когда я хочу получить только один или два из этих атрибутов, а не все из узла. Я предполагаю, что это было бы действительно очевидно, но я еще не понял из-за моей неопытности.
Я пытаюсь сделать то же самое форматирование, но я просто не могу понять, что синтаксис имеет право передавать мои значения параметру и получать то, что я хочу. Вот что у меня есть:
XSL:
<xsl:template name="createAttributeValuePair">
<xsl:param name="attribute" select="." />
<xsl:for-each select="@*">
<fo:block>
<xsl:value-of select="concat(name(),': ')"/>
<xsl:value-of select="."/>
</fo:block>
</xsl:for-each>
</xsl:template>
А вот как я пытаюсь это назвать:
XSL:
<fo:block font-weight="normal" margin-left="6pt">
<xsl:call-template name="createAttributeValuePair">
<xsl:with-param name="attribute"
select="/device:DevicePatientEncounter/device:Encounter/
device:Followup/@UnderlyingRhythm"/>
</xsl:call-template>
</fo:block>
где мой XML выглядит так:
<DevicePatientEncounter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
GeneratedTime="2011-12-14T13:36:05"
EncounterDate="2011-11-15T11:04:54"
xmlns="device">
<Encounter>
<Followup UnderlyingRhythm="Sinus bradycardia"
UnderlyingRhythmRateBpm="44"
IsPmDependent="false"
PresentingRhythm="Atrial fibrillation"
BatteryChargeSeconds="5"
AutoCapFrequency="3 Years"
LastCapacitorFormDate="2011-10-25T00:00:00"
BatteryLongevity="0"
BatteryVoltage="11"
BatteryStatus="MOL"/>
</Encounter>
</DevicePatientEncounter>