我正在尝试实现一个样式表以供 XSLT 1.0 处理器使用,但无法弄清楚如何从与特定条件匹配的前一个节点中检索文本子字符串。这些条件在下面的 XSL 样式表片段中进一步描述,但首先这里是输入文档的示例:
<?xml version="1.0" encoding="UTF-8"?>
<dataRoot>
<dataRow>
<a0>Blank 25/10/2013</a0>
</dataRow>
<dataRow>
<a0>2013006430</a0>
<a5>31.84</a5>
</dataRow>
<dataRow>
<a0>Blank 24/10/2013</a0>
</dataRow>
<dataRow>
<a0>2013006409</a0>
<a5>0.5504</a5>
</dataRow>
<dataRow>
<a0>2013006410</a0>
<a5>7.376</a5>
</dataRow>
</dataRoot>
...这是 XSL 样式表,我需要在其中弄清楚如何获取内联描述的“dateAnalysed”值:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<INBOUND>
<xsl:for-each select="dataRoot/dataRow">
<xsl:variable name="dateAnalysed">
<!-- How can I implement the following as an xpath expression? -->
<xsl:value-of select="text following 'Blank ' in the last preceding a0 node with text that starts with 'Blank '"/>
</xsl:variable>
<xsl:variable name="sampleId">
<xsl:value-of select="a0"/>
</xsl:variable>
<!-- Do stuff with $dateAnalysed and $sampleId -->
</xsl:for-each>
</INBOUND>
</xsl:template>
</xsl:stylesheet>
为了提供更多上下文,这里的输出应该是这样的:
<INBOUND>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006430</SAMPLE_ID>
<PARAMETER_NAME>A5</PARAMETER_NAME>
<SRESULT>31.84</SRESULT>
</INBOX_SAMPLE>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006430</SAMPLE_ID>
<PARAMETER_NAME>Date</PARAMETER_NAME>
<SRESULT>25/10/2013</SRESULT>
</INBOX_SAMPLE>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006409</SAMPLE_ID>
<PARAMETER_NAME>A5</PARAMETER_NAME>
<SRESULT>0.5504</SRESULT>
</INBOX_SAMPLE>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006409</SAMPLE_ID>
<PARAMETER_NAME>Date</PARAMETER_NAME>
<SRESULT>24/10/2013</SRESULT>
</INBOX_SAMPLE>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006410</SAMPLE_ID>
<PARAMETER_NAME>A5</PARAMETER_NAME>
<SRESULT>7.376</SRESULT>
</INBOX_SAMPLE>
<INBOX_SAMPLE>
<SAMPLE_ID>2013006410</SAMPLE_ID>
<PARAMETER_NAME>Date</PARAMETER_NAME>
<SRESULT>24/10/2013</SRESULT>
</INBOX_SAMPLE>
</INBOUND>