MARC21 XML转换输出格式问题及MARC命名空间疑问
问题解答
1. 修复<OCLC_number>标签与内容分行的问题
你遇到的换行问题,是因为XSLT代码中<OCLC_number>元素内部存在换行和缩进空白,这些空白节点会被输出到结果XML中,导致内容和标签分行显示。以下是几种简单的解决办法:
方案一:移除元素内的多余空白
直接把<xsl:value-of>写在<OCLC_number>标签内,去掉中间的换行和缩进:
<OCLC_number><xsl:value-of select="translate(marc:datafield[@tag=034], '(OCoLC)', '')" /></OCLC_number>
方案二:清理输出内容的首尾空白
如果担心原始数据自带多余空白,可以用normalize-space()函数同时去除值的首尾空格:
<OCLC_number><xsl:value-of select="normalize-space(translate(marc:datafield[@tag=034], '(OCoLC)', ''))" /></OCLC_number>
方案三:全局剥离元素内的空白节点
在XSLT顶部添加规则,自动剥离所有元素内的空白节点(注意:可能影响其他需要保留空白的场景,需按需使用):
<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:strip-space elements="*"/> <!-- 添加这一行 --> <xsl:output method="xml" indent="yes"/> ...
应用任意一种方案后,输出的<OCLC_number>标签和内容会保持在同一行,和其他元素格式一致。
2. MARC21 Slim命名空间的作用与定义
- 定义:
http://www.loc.gov/MARC21/slim是美国国会图书馆制定的MARC21轻量级XML Schema的官方命名空间,专门用于标准化MARC21文献记录的XML表示格式,比传统MARC XML更简洁高效。 - 核心作用:
- 避免命名冲突:确保XML中的MARC21元素(如
<record>、<datafield>)不会和其他XML词汇表中的同名元素混淆。 - 精准匹配节点:你的输入XML中
<record>元素带有该命名空间声明,XSLT中通过xmlns:marc="..."绑定前缀后,才能准确选中这些属于MARC21命名空间下的节点(否则会匹配无命名空间的元素,导致找不到目标数据)。 - 明确语义规范:标识元素属于MARC21数据模型,让处理工具(如Saxonica)能正确识别和解析MARC21的结构规则。
- 避免命名冲突:确保XML中的MARC21元素(如
内容的提问来源于stack exchange,提问作者RolfBly
相关产品推荐
相关产品推荐

