我有一个看起来像这样的 xml 文档:
<div>
<p>Hello my name is Bob <cb ed="#R" n="1/>and I live in a house</p>
<p>My name is Susan.</p>
<p>Where are you from?</p>
<p>I am from <cb ed="#R" n="2/>Chicago, Illinois</p>
<p>I also live in Chicago</p>
<p>But I wish I <cb ed="#R" n="3"/>lived in New York</p>
</div>
等等 ...
我基本上想对其进行转换,以便标签围绕第一个和第二个之间的所有内容等等......但我也想保留新创建的 div 中的现有段落。这也意味着创建一个
文本节点周围的标记,该节点是该元素的紧随其后的兄弟。
我希望结果看起来像:
<div id="1">
<p>and I live in a house</p>
<p>My name is Susan.</p>
<p>Where are you from?</p>
<p>I am from</p>
</div>
<div id="2">
<p>Chicago, Illinois</p>
<p>I also live in Chicago</p>
<p>But I wish I</p>
</div>
<div id="3">
<p>lived in New York</p>
</div>
事实证明这是相当困难的。我想知道是否有人可以帮助我走上正确的道路——或者给我指出一个类似转变的例子。
这是我到目前为止所拥有的:
<xsl:template match="tei:p">
<xsl:choose>
<xsl:when test="./tei:cb[@ed='#R']">
<xsl:variable name="number" select="./tei:cb[@ed='#R']/@n"/>
<div id="{$number}">
<span>test</span>
<xsl:for-each select="./tei:cb[@ed='#R']/following::p[preceding::tei:cb[@ed='#R']]">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</div>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
到目前为止,唯一的结果是:
<div id="1rb"><span>test</span></div>
<div id="1va"><span>test</span></div>
<div id="1vb"><span>test</span></div>