需要帮助为TBX文件设置XSLT

时间:2014-03-24 19:28:49

标签: xslt

我是XSLT的新手,我需要帮助为TBX文件创建一个。

以下是TBX代码的示例:

<termEntry id="eid-1">
  <descripGrp>
    <descrip type="Creator">ejablonski</descrip>
  </descripGrp>
  <descripGrp>
    <descrip type="xDate_CreateTime">2014-01-21T20:47:59Z</descrip>
  </descripGrp>
  <langSet xml:lang="nl-nl">
    <tig>
      <term id="tid-1-nl-nl-1">bureau</term>
      <descripGrp>
        <descrip type="CaseSense">Near</descrip>
      </descripGrp>
      <descripGrp>
        <descrip type="xBool_Forbidden">False</descrip>
      </descripGrp>
      <descripGrp>
        <descrip type="PartialTreshold">Half</descrip>
      </descripGrp>
    </tig>
  </langSet>
  <langSet xml:lang="en-us">
    <tig>
      <term id="tid-1-en-us-3">agencies</term>
      <descripGrp>
        <descrip type="CaseSense">Near</descrip>
      </descripGrp>
      <descripGrp>
        <descrip type="xBool_Forbidden">False</descrip>
      </descripGrp>
      <descripGrp>
        <descrip type="PartialTreshold">Half</descrip>
      </descripGrp>
</tig>
  </langSet>
</termEntry>

我需要在适当的英语或荷兰语列中显示以下内容:

Dutch       English
bureau      agencies
more Dutch  more English

TBX文件是词汇表格式。在上面的示例中,除了langset中的xml:lang属性之外,元素和属性是相同的。一个显然是荷兰语,下一个是英语等价物。

这是我到目前为止所尝试的内容:

<?xml version="1.0"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="html"/>
      <xsl:template match="/">
        <html>
          <head>
            <title>Translation</title>
          </head>
          <body>
            <p>
              <xsl:for-each select="/text/body/termEntry/langSet/tig"> <br />
              <xsl:value-of select="langSet =nl-nl/term" disable-output-escaping="yes"/>
              </xsl:for-each>
              <xsl:for-each select="/text/body/termEntry/langSet/tig"> <br />
              <xsl:value-of select="term" disable-output-escaping="yes"/>
              </xsl:for-each>

            </p>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>

感谢, 海梅

1 个答案:

答案 0 :(得分:0)

使用下面的输入XML:

<body>
    <termEntry id="eid-1">
        <descripGrp>
            <descrip type="Creator">ejablonski</descrip>
        </descripGrp>
        <descripGrp>
            <descrip type="xDate_CreateTime">2014-01-21T20:47:59Z</descrip>
        </descripGrp>
        <langSet xml:lang="nl-nl">
            <tig>
                <term id="tid-1-nl-nl-1">bureau</term>
                <descripGrp>
                    <descrip type="CaseSense">Near</descrip>
                </descripGrp>
                <descripGrp>
                    <descrip type="xBool_Forbidden">False</descrip>
                </descripGrp>
                <descripGrp>
                    <descrip type="PartialTreshold">Half</descrip>
                </descripGrp>
            </tig>
        </langSet>
        <langSet xml:lang="en-us">
            <tig>
                <term id="tid-1-en-us-3">agencies</term>
                <descripGrp>
                    <descrip type="CaseSense">Near</descrip>
                </descripGrp>
                <descripGrp>
                    <descrip type="xBool_Forbidden">False</descrip>
                </descripGrp>
                <descripGrp>
                    <descrip type="PartialTreshold">Half</descrip>
                </descripGrp>
            </tig>
        </langSet>
    </termEntry>
</body>

应用以下样式表

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>Translation</title>
            </head>
            <body>
                <table>
                    <thead>
                        <tr>
                            <td>Dutch</td>
                            <td>English</td>
                        </tr>
                    </thead>
                    <tbody>
                        <xsl:for-each select="body/termEntry">
                            <tr>
                                <td><xsl:value-of select="descendant::tig[1]/term"/></td>
                                <td><xsl:value-of select="descendant::tig[2]/term"/></td>
                            </tr>
                        </xsl:for-each>
                    </tbody>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

产生

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

      <title>Translation</title>
   </head>
   <body>
      <table>
         <thead>
            <tr>
               <td>Dutch</td>
               <td>English</td>
            </tr>
         </thead>
         <tbody>
            <tr>
               <td>bureau</td>
               <td>agencies</td>
            </tr>
         </tbody>
      </table>
   </body>
</html>

以下是更多代码:

            <termEntry id="eid-4">
            <descripGrp>
                <descrip type="Creator">ejablonski</descrip>
            </descripGrp>
            <descripGrp>
                <descrip type="xDate_CreateTime">2014-01-21T20:50:15Z</descrip>
            </descripGrp>
            <langSet xml:lang="nl-nl">
                <tig>
                    <term id="tid-4-nl-nl-1">hoedanigheid</term>
                    <descripGrp>
                        <descrip type="CaseSense">Near</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="xBool_Forbidden">False</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="PartialTreshold">Half</descrip>
                    </descripGrp>
                </tig>
            </langSet>
            <langSet xml:lang="en-us">
                <tig>
                    <term id="tid-4-en-us-3">capacity</term>
                    <descripGrp>
                        <descrip type="CaseSense">Near</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="xBool_Forbidden">False</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="PartialTreshold">Half</descrip>
                    </descripGrp>
                </tig>
            </langSet>
        </termEntry>
        <termEntry id="eid-5">
            <descripGrp>
                <descrip type="Creator">ejablonski</descrip>
            </descripGrp>
            <descripGrp>
                <descrip type="xDate_CreateTime">2014-01-21T20:50:52Z</descrip>
            </descripGrp>
            <langSet xml:lang="nl-nl">
                <tig>
                    <term id="tid-5-nl-nl-1">ontwikkelaar</term>
                    <descripGrp>
                        <descrip type="CaseSense">Near</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="xBool_Forbidden">False</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="PartialTreshold">Half</descrip>
                    </descripGrp>
                </tig>
            </langSet>
            <langSet xml:lang="en-us">
                <tig>
                    <term id="tid-5-en-us-3">developer</term>
                    <descripGrp>
                        <descrip type="CaseSense">Near</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="xBool_Forbidden">False</descrip>
                    </descripGrp>
                    <descripGrp>
                        <descrip type="PartialTreshold">Half</descrip>
                    </descripGrp>
                </tig>
            </langSet>
        </termEntry>

所以,从上面的代码我希望得到这样的代码:

荷兰语 英语
hoedanigheid能力
ontwikkelaar开发人员

等等词汇表中的其他术语。此外,我在您的代码中看到,您必须指定标记的实例数量,但可能会有一些或者词汇表中可能有数千个实例。如果我们不必指定有多少,并且代码可以只读取该标记的所有实例,那就太好了。

的Jaime