Из списка упомянутых тем глоссария я хотел бы получить одну таблицу со следующим результатом:
- столбец 1: значение элемента glossterm
- столбец 2: значение элемента glossdef.
Я начинаю с одного 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>
То, что я получаю с моим кодом, - это строка за «глоссентри» с:
- glossterm в первом столбце
- glossdef во втором столбце.
Результат на данный момент:
<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>
Конечный результат должен быть:
- таблица со всеми терминами и определениями в отдельных строках.
- сохранено в отдельном файле в той же папке, что и ditamap.
Пример ожидаемого конечного результата:
<?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. Любая помощь будет приветствоваться.