如何使用 XSLT 将元素的值作为多记录 xml 文档中的新元素进行复制



我刚开始使用XSLT...我有一个包含条记录的 xml 文档。我想获取每个下的值并将其作为新元素插入相应的.不幸的是,我的 XSLT 采用 oai:identifier 的所有值,并将其转储到每条记录的 mods:identifier 值下,因为我不知道要使用的正确表达式。

下面是 xml 文档的一个片段。

<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xip="http://www.tessella.com/XIP/v4"
    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>2019-06-15T02:21:52Z</responseDate>
    <request verb="ListRecords" metadataPrefix="MODS" from="2019-06-01T00:00:00Z"
        until="2019-06-04T23:59:59Z">https://lac.preservica.com/OAI-PMH/</request>
    <ListRecords>
        <record>
            <header>
                **<identifier>oai:du:191f96fe-fcf7-4205-a6b0-980e74b51178</identifier>**
                <datestamp>2019-06-04T22:42:33Z</datestamp>
            </header>
            <metadata>
                <mods:mods xmlns:mods="http://www.loc.gov/mods/v3"
                    xmlns="http://www.loc.gov/mods/v3" xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    xmlns:local="http://www.loc.org/namespace" version="3.4">
                    <titleInfo>
                        <title>Cadre de surveillance</title>
                    </titleInfo>
                    <name type="corporate">
                        <namePart>Canada.</namePart>
                        <namePart>Agence de la consommation en matière financière du
                            Canada</namePart>
                    </name>
                    <typeOfResource>text</typeOfResource>
                    <genre authority="rdacontent/fre">texte</genre>
                    <originInfo>
                        <place>
                            <placeTerm authority="marccountry" type="code">onc</placeTerm>
                        </place>
                        <dateIssued encoding="marc">20182017</dateIssued>
                        <edition>Version finale révisée.</edition>
                        <issuance>monographic</issuance>
                    </originInfo>
                    <originInfo displayLabel="publisher">
                        <place>
                            <placeTerm type="text">Ottawa : </placeTerm>
                        </place>
                        ....
                    **<identifier invalid="yes">9780660082752</identifier>**
                    ....
                </mods:mods>
            </metadata>
            <about>
                <aboutRecord:aboutRecord
                    xmlns:aboutRecord="http://www.preservica.com/OAI-PMH/Extension"
                    xmlns="http://www.preservica.com/OAI-PMH/Extension">
                    <Identifier>oai:du:191f96fe-fcf7-4205-a6b0-980e74b51178</Identifier>
                    <CurrentVersion>0cb46171-b015-4ba1-bde8-4fd87f4c6cee</CurrentVersion>
                    <ChangeType>Created</ChangeType>
                    <XIP schemaURI="http://www.tessella.com/XIP/v4">
                        <xip:DeliverableUnit status="new">
                            ...
                         </xip:CurrentVersion>
                        </xip:DeliverableUnit>
                    </XIP>
                </aboutRecord:aboutRecord>
            </about>
        </record>
<record>
            <header>
                <identifier>oai:du:f0dbbd4c-ec70-40cd-bbb2-4b88926043fd</identifier>
                <datestamp>2019-06-04T22:42:33Z</datestamp>
            </header>
            <metadata>
                <mods:mods xmlns:mods="http://www.loc.gov/mods/v3"
                    xmlns="http://www.loc.gov/mods/v3" xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    xmlns:local="http://www.loc.org/namespace" version="3.4">
                    <titleInfo>
                        <title>Compréhension et sensibilisation aux commotions liées au sport, en
....

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mods="http://www.loc.gov/mods/v3"
    xmlns:oai="http://www.openarchives.org/OAI/2.0/" xmlns:xip="http://www.tessella.com/XIP/v4"
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    exclude-result-prefixes="xs xd mods xip oai aboutRecord"
    xmlns:aboutRecord="http://www.preservica.com/OAI-PMH/Extension"
    xmlns="http://www.preservica.com/OAI-PMH/Extension" version="2.0">
    <xsl:output method="xml" indent="yes"/>
    <!-- Identity template. Copies everything -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <!-- Overide identity template to add a new identifier to the MODS identifier element -->
    <xsl:template match="mods:mods/mods:identifier[1]">
        <!-- Copy the existing elements -->
        <xsl:copy>
            <!-- And everything inside it -->
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
        <!-- Add new node -->
        <identifier type="preservation">
            <xsl:value-of select="/oai:OAI-PMH/oai:ListRecords/oai:record/oai:header/oai:identifier"></xsl:value-of>
        </identifier>
    </xsl:template>

预期结果是获取 oai:identifier (oai:du:191f96fe-fcf7-4205-a6b0-980e74b51178( 的值并将其作为相应的新 mods:identifier 插入,并对每条记录重复此过程。如下:

<identifier type="preservation">oai:du:191f96fe-fcf7-4205-a6b0-980e74b51178</identifier>

实际结果最终为:

<identifier xmlns="http://www.preservica.com/OAI-PMH/Extension" type="preservation">oai:du:191f96fe-fcf7-4205-a6b0-980e74b51178 oai:du:f0dbbd4c-ec70-40cd-bbb2-4b88926043fd oai:du:17010ebc-1fbc-47bb-96ab-5fb17f7171cb....
  • 我只想要每条记录一个相应的 oai:du:xxxxxxx。
  • 我不想要 xmlns="http://www.preservica.com/OAI-PMH/Extension">

您获得该命名空间是因为样式表在其根元素上声明了xmlns="http://www.preservica.com/OAI-PMH/Extension"。目前尚不清楚您是否需要为您创建的其他元素,如果没有,只需将其取出,否则使用

    <!-- Add new node -->
    <identifier xmlns="http://www.loc.gov/mods/v3" type="preservation">

(分别是你为 identifier 元素需要的任何命名空间,你扔进去的所有数据我有点迷路了(。

至于引用相应的标识符,我想你想参考

  <xsl:value-of select="ancestor::oai:record/oai:header/oai:identifier"/>

相关内容

  • 没有找到相关文章

最新更新