首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为OAI-PMH响应生成XSLT?

如何为OAI-PMH响应生成XSLT?
EN

Stack Overflow用户
提问于 2021-06-24 14:14:28
回答 1查看 255关注 0票数 1

我有一些xml数据,需要将这些数据索引到solr核心。为此,我需要生成XSLT文件,以便将我的自定义XML数据映射为solr必需格式XML (1)。这里是我的自定义数据:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
 <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
  <responseDate>2021-06-24T06:02:01Z</responseDate>
  <request verb="ListRecords" metadataPrefix="oai_dc" set="p15869coll19" from="2020-09-01" until="2020-09-30">http://digital.americanancestors.org/oai/oai.php</request>
  <ListRecords>
    <record>
        <header>
            <identifier>oai:digital.americanancestors.org:p15869coll19/17</identifier>
            <datestamp>2020-09-21</datestamp>
            <setSpec>p15869coll19</setSpec>
        </header>
        <metadata>
            <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
                <dc:title>Papers of Abraham C. Ratshesky</dc:title>
                <dc:identifier>P-586</dc:identifier>               
                <dc:relation>01</dc:relation>
                <dc:subject>Halifax Explosion, Halifax, N.S. 1917; Massachusetts, General Court. Senate; American Red Cross. Boston Metropolitan Chapter</dc:subject>
                <dc:description>Photographs; Morse Family</dc:description>
                <dc:rights>Open access</dc:rights>
                <dc:rights>User has an obligation to determine copyright or other use restrictions prior to publication or distribution. Please contact the archives at jhcreference@nehgs.org or 617-226-1245 for more information.</dc:rights>
                <dc:language>English</dc:language>
                <dc:source>Wyner Family Jewish Heritage Center, New England Historic Genealogical Society</dc:source>
                <dc:identifier>http://digital.americanancestors.org/cdm/ref/collection/p15869coll19/id/17</dc:identifier>
            </oai_dc:dc>
        </metadata>
    </record>
  </ListRecords>
 </OAI-PMH>

是否可以为上面的XML生成XSL文件?我曾经尝试用一个在线XSLT生成器生成,但没有成功。以下是我尝试过的:我正在使用这个在线生成器。我的输入XMl在上面。

我的XSLT:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0"
    xpath-default-namespace="">

<xsl:output method="xml"
            indent="yes"
            encoding="UTF-8"/>

<xsl:template match="/">
    <add>
        <xsl:for-each select="OAI-PMH/ListRecords/record">
            <doc>
                <field name="id">
                    <xsl:value-of select="header/identifier"/>
                </field>
                <field name="ss_title">
                    <xsl:value-of select="metadata/oai_dc/title"/>
                </field>
                <field name="ss_relation">
                    <xsl:value-of select="metadata/oai_dc/dc:relation"/>
                </field>
                <field name="ss_description">
                    <xsl:value-of select="metadata/oai_dc:dc/dc:description"/>
                </field>
            </doc>
        </xsl:for-each>
    </add>
  </xsl:template>
</xsl:transform>

期望产出:

代码语言:javascript
复制
 <add>
      
  <doc>
      <field name="id">oai:digital.americanancestors.org:p15869coll19/17 </field>
      <field name="ss_title">Papers of Abraham C. Ratshesky</field>
      <field name="ss_relation"> 01</field>
      <field name="ss_description">Photographs; Morse Family</field>
   </doc>
       
 </add>

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 16:42:12

您的XML使用了一些名称空间,而样式表没有考虑这些名称空间。

而不是:

代码语言:javascript
复制
<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0"
    xpath-default-namespace="">

尝试:

代码语言:javascript
复制
<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0"
    xpath-default-namespace="http://www.openarchives.org/OAI/2.0/"
    xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    exclude-result-prefixes="oai_dc dc">

您还需要替换:

代码语言:javascript
复制
<xsl:value-of select="metadata/oai_dc/title"/>

通过以下方式:

代码语言:javascript
复制
<xsl:value-of select="metadata/oai_dc:dc/dc:title"/>

并对ss_relation的值进行了类似的修正。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68117460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档