从XSL文档版本1.0中的XML获取值

时间:2013-11-28 12:30:40

标签: xml xslt xsl-fo altova

我有一个问题。我正在写一份PDF文档中的表格。 除了一个,我得到了所有正确的值。

我从XML中获取一个值,例如调用它 然后我需要在同一个XML文档中找到该名称,并从其出现的其他位置获取另一个值:

请看这个示例XML文档:

               </Comment>
                   (...)




                  <Comment>
                  </Comment>

所以我在

中写NAME

需要保存该值,在Tset节点中找到它,并在xsl代码中的State,Program name和Tool Name之后写入ToolAddr值。

我的xsl显示NAME并希望下一个单元格显示名称的大小:

                                                                                                                                                                                                                                                                                                                                                                          我需要这个,因为Tset是所有工具的列表,在Machining中我使用的工具不是正常的顺序,可能需要工具的工具地址不止一次......

HELP !!!

1 个答案:

答案 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”。