我基本上是在寻找与此相反的
我正在处理的 XML 示例:
<profiledesc>
<creation>
Finding Aid encoded by Some Guy, <date normal="2011-09-21">21 September 2011</date>
</creation>
<langusage encodinganalog="546">
Finding aid written in
<language langcode="eng" scriptcode="latn" encodinganalog="041">
English
</language>
</langusage>
</profiledesc>
我正在编写的 XSLT 示例(仅相关部分):
<xsl:template priority="3" match="descgrp|eadheader|filedesc|titlestmt|profiledesc|archdesc|langusage|did">
<xsl:apply-templates select="./child::node()"/>
</xsl:template>
<xsl:template priority="2" match="language">
<atom name="EADLanguageOfFindingAid" type="text" size="short">
<xsl:value-of select="."/>
</atom>
<atom name="EADLanguageCodeOfFindingAid" type="text" size="short">
<xsl:value-of select="normalize-space(@langcode)"/>
</atom>
</xsl:template>
... Other templates, for nodes like 'creation' ....
我得到的(坏)输出的一个例子:
... Some other tags ...
<atom name="EADCreation" type="text" size="short">Finding Aid encoded by Some Guy, 21 September 2011</atom>
Finding aid written in
<atom name="EADLanguageOfFindingAid" type="text" size="short"> English </atom>
<atom name="EADLanguageCodeOfFindingAid" type="text" size="short">eng</atom>
... Some other tags ...
我想要的(好)输出的一个例子:
... Some other tags ...
<atom name="EADCreation" type="text" size="short">Finding Aid encoded by Some Guy, 21 September 2011</atom>
<atom name="EADLanguageOfFindingAid" type="text" size="short"> English </atom>
<atom name="EADLanguageCodeOfFindingAid" type="text" size="short">eng</atom>
... Some other tags ...
请注意,在第二个输出中,缺少“Finding aid written in”这一行。
因此,如您所见,我设计的模板只输出“语言”标签的“语言”部分,但输出的是整个标签,包括“书写的查找帮助”文本节点。我不能确定文本节点是否存在或者它将是第一个(或最后一个,或在任何特定位置)。我也不能确定只有一个文本节点或一个子节点。所以,我不能使用任何依赖于简单地选择“[xth]”节点(子节点或文本)的解决方案。
在这一点上,我很感激任何建议,甚至是一些可以帮助我通过 Google 找到解决方案的关键字(到目前为止我还没有运气)。