我正在使用具有以下結構的 TEI 檔案:
<body>
<pb n="1"/>
<head>text text <lb/>text text<lb/>text text <ref target="n1">
<hi rend="super">1</hi>
</ref>
</head>
<byline>text</byline>
<note type="bio" place="bottom">text text...</note>
<div>
<p>text, <title>text</title> text <title>text</title> text text text<title>Saved</title> text text text</p>
<q>text text text text<ref target="n2">
<hi rend="super">2</hi>
</ref></q>
<p>text <title>text</title> and <title>text, </title>
</p>
</div>
<pb n="2"/>
<div>
<p>
<title>text</title> text text text</p>
<p> text text text text <hi rend="italic">text,</hi> "text." text text text <hi rend="italic">text,</hi> text text text<ref target="n3">
<hi rend="super">3</hi>
</ref> text text text <hi rend="italic">text</hi> text text text <hi rend="italic">text</hi> text text text text<ref target="n4">
<hi rend="super">4</hi>
</ref> text text text text</p>
<p>text text text text <hi rend="italic">text text text text<ref target="n5">
<hi rend="super">5</hi>
</ref></hi> text text text text text </p>
</div>
<pb n="3"/> text text text...
</body>
我只需要在每個 pb 元素到頁面元素之間包裝文本。Stackoverflow XSLT wrap nodes之間有一個非常相似的帖子,我從中調整了接受的答案。問題是它將所有后代節點復制到輸出。我只希望回傳文本,洗掉任何其他元素,如<head>or<byline>或<p>等。只需要復制文本值。
這是我的 XSLT:
<xsl:template match="tei:text/tei:body">
<text xmlns="http://digital.library.ptsem.edu/ptsl" type="ocr" source="tei">
<xsl:variable name="parent" select="."/>
<xsl:for-each-group select="descendant::node()" group-starting-with="tei:pb[@n]">
<page number="{@n}" xmlns="http://digital.library.ptsem.edu/ptsl">
<xsl:apply-templates select="$parent/node()[descendant-or-self::node() intersect current-group()]" mode="subtree"/>
</page>
</xsl:for-each-group>
</text>
</xsl:template>
<xsl:template match="tei:pb[@n]" mode="subtree"/>
<xsl:template match="node()" mode="subtree">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()[descendant-or-self::node() intersect current-group()]" mode="subtree"/>
</xsl:copy>
</xsl:template>
回傳的結果是:
<?xml version="1.0" encoding="UTF-8"?>
<text>
<page number="1">
<head>text text <lb/>text text<lb/>text text <ref target="n1">
<hi rend="super">1</hi>
</ref>
</head>
<byline>text</byline>
<note type="bio" place="bottom">text text...</note>
<div>
<p>text, <title>text</title> text <title>text</title> text text text<title>Saved</title> text text text</p>
<q>text text text text<ref target="n2">
<hi rend="super">2</hi>
</ref></q>
<p>text <title>text</title> and <title>text, </title>
</p>
</div>
</page>
<page number="2">
<div>
<p>
<title>text</title> text text text</p>
<p> text text text text <hi rend="italic">text,</hi> "text." text text text <hi rend="italic">text,</hi> text text text<ref target="n3">
<hi rend="super">3</hi>
</ref> text text text <hi rend="italic">text</hi> text text text <hi rend="italic">text</hi> text text text text<ref target="n4">
<hi rend="super">4</hi>
</ref> text text text text</p>
<p>text text text text <hi rend="italic">text text text text<ref target="n5">
<hi rend="super">5</hi>
</ref></hi> text text text text text </p>
</div>
</page>
<page number="3"> text text text... </page>
</text>
期望的結果是:
<text>
<page number="1">text text text text text text 1 text text text...
text, text text text text text text Saved text text text
text text text text 2 text text and text,
</page>
<page number="2">text text text text
text text text text text, "text." text text text text, text text text 3
text text text text text text text text text text text text 4
text text text text text text text text text text text text 5
text text text text text
</page>
<page number="3"> text text text... </page>
</text>
uj5u.com熱心網友回復:
似乎使用
<page number="{@n}" xmlns="http://digital.library.ptsem.edu/ptsl">
<xsl:copy-of select="current-group()[self::text()]"/>
</page>
代替
<page number="{@n}" xmlns="http://digital.library.ptsem.edu/ptsl">
<xsl:apply-templates select="$parent/node()[descendant-or-self::node() intersect current-group()]" mode="subtree"/>
</page>
應該只輸出分組的文本節點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489234.html
