我刚开始使用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"/>