从参考的词汇表主题列表中,我想得到一张表,其结果如下:
我从一个DITAMAP开始,其中引用了“词汇表”主题。 在这个词汇表主题中,我可以找到我想使用的两个元素“ glossterm”和“ glossdef”。
DITAMAP
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map>
<title>Glossary</title>
<topicref href="gloss_ar3.dita" keys="ar3"/>
<topicref href="gloss_chr.dita" keys="chr"/>
</map>
glossentry 1(gloss_ar3.dita):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="glossentry_vhg_gt4_m2b">
<glossterm><sort-as value="AR3"/>AR3</glossterm>
<glossdef>Amplification Reagent 3</glossdef>
</glossentry>
Glossentry 2(gloss_chr.dita):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="glossentry_v1f_ktv_j2b">
<glossterm><sort-as value="Chr"/>Chr</glossterm>
<glossdef>Chromosome</glossdef>
</glossentry>
我的代码得到的是每个“ glossentry”中的一行:
到目前为止的结果:
<row>
<entry>AR3</entry>
<entry>Amplification Reagent 3</entry>
</row>
<row>
<entry>Chr</entry>
<entry>Chromosome</entry>
</row>
到目前为止很好。
但是我想:
到目前为止,这是我的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes" />
<xsl:template match="/map">
<xsl:apply-templates select="topicref"/>
</xsl:template>
<xsl:template name="rows" match="topicref">
<xsl:for-each select="document(@href)/glossentry">
<row>
<entry><xsl:apply-templates select="glossterm"/></entry>
<entry><xsl:apply-templates select="glossdef"/></entry>
</row>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
最终结果应为:
预期最终结果的示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="topic_ph2_kqz_fhb">
<title>Glossary</title>
<body>
<p>
<table id="table_rzs_kqz_fhb">
<title/>
<tgroup cols="2">
<colspec colname="c1" colnum="1"/>
<colspec colname="c2" colnum="2"/>
<thead>
<row>
<entry>Term</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>AR3</entry>
<entry>Amplification Reagent 3</entry>
</row>
<row>
<entry>Chr</entry>
<entry>Chromosome</entry>
</row>
</tbody>
</tgroup>
</table>
</p>
</body>
</topic>
我还是XSLT的新手。任何帮助都将受到欢迎。
答案 0 :(得分:0)
如果您深入了解DITA技术,特别是专业化和键定义/引用,您将知道不需要特殊的XSLT样式表即可生成用于表样式的新主题。
仅通过更改DITA地图和主题创作即可解决您的要求。
--apilog stdout
专业化的glossaryTable
。simpletable
定义键这里是创作示例:
DITA主地图
glossentry
键定义DITA映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map>
<title>Glossary Table Test</title>
<mapref href="mKeydefMap.ditamap"/>
<topicref href="GlossaryTableTest.dita"/>
</map>
Glossenries:gloss_chr.dita和gloss_ar3.dita
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map>
<title>Keydef Map</title>
<keydef keys="AR3" href="gloss_ar3.dita"/>
<keydef keys="CHR" href="gloss_chr.dita"/>
</map>
GlossaryTableTest.dita
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="glossentry_v1f_ktv_j2b">
<glossterm id="term"><sort-as value="Chr"/>Chr</glossterm>
<glossdef id="def">Chromosome</glossdef>
</glossentry>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="glossentry_vhg_gt4_m2b">
<glossterm id="term"><sort-as value="AR3"/>AR3</glossterm>
<glossdef id="def">Amplification Reagent 3</glossdef>
</glossentry>
使用DITA-OT 3.3和PDF5-ML进行格式化的结果
此解决方案使用<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE concept PUBLIC "-//ANTENNA HOUSE//DTD DITA Concept//EN" "concept.dtd">
<concept id="GlossaryTableTest">
<title>Glossary Table Test</title>
<conbody>
<p>Glossary Table</p>
<glossaryTable>
<gtHead>
<gtEntryHd>Term</gtEntryHd>
<gtEntryHd>Definition</gtEntryHd>
</gtHead>
<gtRow>
<gtEntry><glossterm conkeyref="AR3/term"/></gtEntry>
<gtEntry><glossdef conkeyref="AR3/def"/></gtEntry>
</gtRow>
<gtRow>
<gtEntry><glossterm conkeyref="CHR/term"></glossterm></gtEntry>
<gtEntry><glossdef conkeyref="CHR/def"></glossdef></gtEntry>
</gtRow>
</glossaryTable>
</conbody>
</concept>
专业化。您可以看到原始的专业代码in GitHub,因为glossaryTable
是glossaryTable
的专业代码,因此样式表定制需要 NO 。
答案 1 :(得分:-1)
AFAICT,您想要执行以下操作:
XSLT 1.0
<xsl:template match="/map">
<table>
<xsl:for-each select="topicref">
<xsl:variable name="gloss" select="document(@href)/glossentry" />
<row>
<entry>
<xsl:value-of select="$gloss/glossterm"/>
</entry>
<entry>
<xsl:value-of select="$gloss/glossdef"/>
</entry>
</row>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
这是假设topicref
文档中的每个map
都在同一目录中有一个文件,其名称等于href
属性的值。