私はこのようなメインのXMLドキュメントを持っています:
<chapter xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="chapter1">
<title>First chapter</title>
<section xml:id="section1">
<imageobject>
<id>aa12</id>
<image fileref="image1.jpg"/>
</imageobject>
<imageobject>
<id>bb13</id>
<image fileref="image2.jpg"/>
</imageobject>
</section>
<section xml:id="section2" xml:base="../other/section1.xml">
<imageobject>
<id>ab14</id>
<image fileref="image1.jpg"/>
</imageobject>
<imageobject>
<id>ab15</id>
<image fileref="image2.jpg"/>
</imageobject>
<section xml:id="section3" xml:base="../some-other/more/section3.xml">
<imageobject>
<id>ac16</id>
<image fileref="image1.jpg"/>
</imageobject>
</section>
</section>
<section xml:id="section4" xml:base="../some-other/section4.xml">
<imageobject>
<id>ac17</id>
<image fileref="image2.jpg"/>
</imageobject>
</section>
</chapter>
および別のXMLファイルと次のような値:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<NewData>
<Rename id="ab14" imageName="aaaa.jpg"/>
<Rename id="ab15" imageName="bbbb.jpg"/>
<Rename id="ac16" imageName="cccc.jpg"/>
<Rename id="ac17" imageName="dddd.jpg"/>
</NewData>
そして最後に、以下のような出力が必要です。これは、id値に応じて名前が変更された正しい画像名に置き換えられます。
<chapter xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="chapter1">
<title>First chapter</title>
<section xml:id="section1">
<imageobject>
<image fileref="image1.jpg"/>
</imageobject>
<imageobject>
<image fileref="image2.jpg"/>
</imageobject>
</section>
<section xml:id="section2" xml:base="../other/section1.xml">
<imageobject>
<image fileref="aaaa.jpg"/>
</imageobject>
<imageobject>
<image fileref="bbbb.jpg"/>
</imageobject>
<section xml:id="section3" xml:base="../some-other/more/section3.xml">
<imageobject>
<image fileref="cccc.jpg"/>
</imageobject>
</section>
</section>
<section xml:id="section4" xml:base="../some-other/section4.xml">
<imageobject>
<image fileref="dddd.jpg"/>
</imageobject>
</section>
</chapter>
ここで何が起こるかというとid
、最初のXMLドキュメントのid
属性が2番目のXMLの属性と一致する場合、最初のドキュメントのの値は2番目のXMLファイルの値にfileref
置き換えられます。imageName
ここで示した例をご覧ください。
XSLT 1.0を使用してこれを行うにはどうすればよいですか?
SaxonまたはXsltprocプロセッサを使用しています。
前もって感謝します..!!