我在写一个xslt样式表,将MARC-xml记录转换为FGDC-xml元数据。很多MARC字段在最后(句号,冒号,逗号等)都有多余的标点符号,我想删除它们。尽管如此,我不想删除全部标点符号。我的想法是编写一个如果声明和测试如果字段结束与指定的字符,然后将其删除,但我不知道:1)如果这是一个好方法,2)如何指定该模板处理。xslt删除结尾标点符号
编辑我的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:marc="http://www.loc.gov/MARC21/slim" >
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="marc:collection/marc:record">
<xsl:result-document method="xml" href="banana_{marc:controlfield[@tag=001]}.xml">
<metadata>
<xsl:apply-templates select="self::marc:record"/>
</metadata>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template match="marc:record">
<pubinfo>
<pubplace><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='a']"/></pubplace>
<publish><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='b']" /></publish>
</pubinfo>
</xsl:template>
</xsl:stylesheet>
这里是我的xml文档(或至少它的代表性部分):
<?xml version="1.0" encoding="UTF-8"?>
<marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<marc:record>
<marc:leader>01502cfm a2200313 a 4500</marc:leader>
<marc:controlfield tag="001">7943586</marc:controlfield>
<marc:datafield tag="260" ind1=" " ind2=" ">
<marc:subfield code="a">[S.l. :</marc:subfield>
<marc:subfield code="b">s.n. ,</marc:subfield>
<marc:subfield code="c">18--]</marc:subfield>
</marc:datafield>
</marc:record>
<marc:record>
<marc:leader>01290cem a2200313 a 4500</marc:leader>
<marc:controlfield tag="001">8108664</marc:controlfield>
<marc:datafield tag="260" ind1=" " ind2=" ">
<marc:subfield code="a">Torino :</marc:subfield>
<marc:subfield code="b">Editore Gio. Batt. Maggi ,</marc:subfield>
<marc:subfield code="c">1863.</marc:subfield>
</marc:datafield>
</marc:record>
</marc:collection>
“不知道放在这里?” 'substring(1,string-length(marc:datafield [@ tag = 260]/marc:subfield [@ code ='b']) - 1)'工作吗? – Pawel
我会尽力......但首先我想我的测试语句的语法错误,但是,这阻止了正确编译样式表。我得到错误:“在令牌开始的意外冒号” –
好吧,我想我找到了“意外冒号...”的错误,现在我有:''。请原谅我,如果这是一个愚蠢的问题@Pawel,但我应该在你的建议的东西附上一行吗?我试图插入它,它只返回一个空标签。 –