XSLT:访问给定节点的孙子

时间:2015-06-03 08:34:10

标签: xml xslt

我有以下xml,

<doc>
    <table type="Horizontal lines" width="100%">
             <group cols="5">
                <colspec colname="1" colwidth="58%"/>
                <colspec colname="2" colwidth="32%"/>

                <thead>
                   <row>
                      <entry namest="1" align="center">
                         <p type="Table head">Testing Table</p>
                      </entry>
                      <entry namest="2" align="center">
                         <p type="Table head">Testing Head</p>
                      </entry>
                   </row>
                </thead>
                <tbody>
                   <row>
                      <entry namest="1" align="left">
                         <p type="Table text">Mobile OS</p>
                      </entry>
                      <entry namest="2" align="left">
                         <p type="Table text">Android</p>
                      </entry>
                   </row>
                   <row>
                      <entry namest="4" align="left">
                         <p type="Table text">
                             <link type="Hyperlink">www.facebook.com</link>  
                         </p>
                         <p type="Table text"/>
                      </entry>
                      <entry namest="4" align="left">
                         <p type="Table text">
                             <link type="Hyperlink">www.skynews.com</link>  
                         </p>
                         <p type="Table text"/>
                      </entry>
                   </row>
            </tbody>
      </group>
    </table>
    <para>
      <entry namest="4" align="left">
         <p type="Table text">
            <link type="Hyperlink">www.devandroid.com</link>  
         </p>
           <p type="Table text">
            <link type="Hyperlink">www.google.com</link>  
         </p>
         <p type="Table text"/>
      </entry>
    </para>
<doc>

正如您所看到的,文档中有一些<link>个节点放置了<table>节点的孙子节点,并且一些<link>节点不在<table>个节点之内(没有任何关系)使用<table>节点。 我需要做的只是将<link>个节点文本(它们是<table>节点的孙子节点)转换为大写字母。 (在此示例中,只应将<link type="Hyperlink">www.facebook.com</link> and <link type="Hyperlink">www.skynews.com</link>大写。)

那么,我怎样才能选择仅在<link>节点内的<table>个节点?

我尝试了一些代码如下,但它没有给出结果。

<xsl:template match="table::link">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
             more codes...
        </xsl:copy>
 </xsl:template>

任何建议如何访问孙节点的表节点?

1 个答案:

答案 0 :(得分:0)

您可以对表格中的链接使用以下匹配模式(链接的默认模板规则优先级较低):

<xsl:template match="link[ancestor::table]">
   ...
</xsl:template>

<xsl:template match="link">
   ...
</xsl:template>