私は持っている
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
<article lang="en">
<articleinfo>
<title>Test Article</title>
</articleinfo>
<sect1 label="">
<title>Test1 Section</title>
<para>Some content</para>
</sect1>
<sect1>
<title>Test2 Section</title>
<para>Another content</para>
</sect1>
</article>
「Test1」というタイトルの sect1 を 1 つだけ抽出したいので、次のような単純な xsl 変換を記述します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://docbook.org/ns/docbook">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="article/sect1[contains(title, 'Test1')]">
<xsl:message>Match</xsl:message>
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
しかし、なんらかの理由で、このような変換は、言及されたタイトルの sect1 だけでなく、タグを除いたすべての XML ファイルのコンテンツもコピーします。
xsltproc ./extract_sect1.xsl test.xml
Match
<?xml version="1.0"?>
Test Article
<sect1 label="">
<title>Test1 Section</title>
<para>Some content</para>
</sect1>
Test2 Section
Another content
では、なぜ「Test2 セクション」と「別のコンテンツ」が表示されるのでしょうか。この状況を修正するにはどうすればよいですか?