【发布时间】:2018-01-16 17:30:36
【问题描述】:
我有以下 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<mets:mets xmlns:mets="http://www.loc.gov/METS/">
<mets:fileSec>
<mets:fileGrp ID="rep1" ADMID="rep1-amd">
<mets:file ID="fid1-1" ADMID="fid1-1-amd">
<mets:FLocat xmlns:xlin="http://www.w3.org/1999/xlink" LOCTYPE="URL" xlin:href="/exlibris1/transfer/lza-tib/submission.tib/ingest/GBV631313192/content/streams/MASTER/Prandtl_4.pdf"/>
</mets:file>
</mets:fileGrp>
<mets:fileGrp ID="rep2" ADMID="rep2-amd">
<mets:file ID="fid1-2" ADMID="fid1-2-amd">
<mets:FLocat xmlns:xlin="http://www.w3.org/1999/xlink" LOCTYPE="URL" xlin:href="/exlibris1/transfer/lza-tib/submission.tib/ingest/GBV631313192/content/streams/DERIVATIVE_COPY/631313192.pdf"/>
</mets:file>
</mets:fileGrp>
</mets:fileSec>
</mets:mets>
对于每个 mets:FLocat 我想做以下更改:
现在:
<mets:FLocat xmlns:xlin="http://www.w3.org/1999/xlink" LOCTYPE="URL" xlin:href="/exlibris1/transfer/lza-tib/submission.tib/ingest/GBV631313192/content/streams/MASTER/Prandtl_4.pdf"/>
必须是:<mets:FLocat LOCTYPE="URL" xlin:href="file://MASTER/Prandtl_4.pdf" xmlns:xlin="http://www.w3.org/1999/xlink"/>
所以我们删除/exlibris1/transfer/lza-tib/submission.tib/ingest/GBV631313192/content/streams,而不是添加file://
这是我的 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:for-each select="/mets:mets/mets:filesec/mets:fileGrp/mets:file/mets:Flocat">
<xsl:value-of select="xlin:href"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我对 XSLT 非常陌生,我不知道如何引用我必须更改的行。也许有一些想法?
【问题讨论】:
-
如果您想更改属性值,请为该属性编写模板并实施该更改。你真的被限制在 XSLT
version="1.0"或者你为什么在你的 XSLT 代码中使用那个版本?
标签: xml xslt replace substitution