我有一个问题。我正在写一份PDF文档中的表格。 除了一个,我得到了所有正确的值。
我从XML中获取一个值,例如调用它 然后我需要在同一个XML文档中找到该名称,并从其出现的其他位置获取另一个值:
请看这个示例XML文档:
</Comment>
(...)
<Comment>
</Comment>
所以我在
中写NAME需要保存该值,在Tset节点中找到它,并在xsl代码中的State,Program name和Tool Name之后写入ToolAddr值。
我的xsl显示NAME并希望下一个单元格显示名称的大小:
我需要这个,因为Tset是所有工具的列表,在Machining中我使用的工具不是正常的顺序,可能需要工具的工具地址不止一次......
HELP !!!
答案 0 :(得分:1)
因为问题有点模糊,很难给出准确的答案,但听起来你可以使用 xsl:key 来查找你的值(或值)想。
如果您想查找代码元素,但他们的产品/名称,您可以像这样定义一个键:
<xsl:key name="lookupcode" match="code" use="following-sibling::product[1]/Name" />
因此,这与代码元素匹配,但允许通过其后面的第一个 Product 元素的“名称”进行查找。 (注意,如果您实际使用名称空间,请记住在xxx之前放置相关前缀。)
然后,例如,要使用此键查找“asdf”值的代码,您可以这样做
<xsl:value-of select="key('lookupcode', 'asdf')" />
在一个更实际的示例中,如果您想在 zzz 下查找 NAME 元素的代码,您的代码可能如下所示:
<xsl:for-each select="zzz/NAME">
Name: <xsl:value-of select="." />
code: <xsl:value-of select="key('lookupcode', .)" />
</xsl:for-each>
在稍微更实际的示例中,这是一个输出HTML表的简单示例。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:key name="lookupcode" match="code" use="following-sibling::product[1]/Name" />
<xsl:template match="yyyy">
<table>
<xsl:for-each select="zzz/Name">
<tr>
<td><xsl:value-of select="." /></td>
<td><xsl:value-of select="following-sibling::DATE[1]" /></td>
<td><xsl:value-of select="key('lookupcode', .)" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
这应该很容易转换为输出xsl:fo。 “tr”元素对应于“fo:table-row”和“td”元素对应于“fo:table-cell”。