これは非常に簡単な修正だと確信していますが、困惑しています。次のルート要素と繰り返しの子要素を持つ入力 XML があります。
<modsCollection
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.loc.gov/mods/v3"
xsi:schemaLocation="
http://www.loc.gov/mods/v3
http://www.loc.gov/standards/mods/v3/mods-3-4.xsd">
<mods version="3.4">
...
各ノードに一致する次の XSLT シートがあり、要素<mods>
によって名前が付けられた別のファイルとしてそれを追い出します<identifier type="local">
。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.loc.gov/mods/v3">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/modsCollection">
<xsl:for-each select="mods">
<xsl:variable name="filename"
select="concat(normalize-space(
identifier[@type='local']),
'.xml')" />
<xsl:result-document href="{$filename}">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
これは、XML 入力のルート要素に xmlns:xsi、xmlns、または xsi:schemaLoaction 属性がない場合に機能します。したがって、たとえば、次のように機能します。
<modsCollection>
<mods version="3.4">
...
一部の MODS ファイルにプレフィックスが含まれていることは知っていますが、XSLT マッチングでプレフィックスが検索されない場合、プレフィックスがないと機能しない理由がわかりません。ご意見やアドバイスをいただければ幸いです。