次のような XML ファイルがあり、それを別の XML ファイルに変換したいと考えています。
<body>
<outline text="A">
<outline text="Abelson, Harold" author="Harold Abelson" title="Struktur und Interpretation von Computerprogrammen. Eine Informatik-Einführung" publisher="Springer Verlag" isbn="3540520430" year="1991"/>
<outline text="Abrahams, Paul W." author="Paul W. Abrahams" title="Tex for the Impatient" publisher="Addison-Wesley Pub Co" isbn="0201513757" year="2000"/>
</outline>
<outline text="B">
<outline text="Bach, Fred" author="Fred Bach" title="UNIX Handbuch zur Programmentwicklung" publisher="Hanser Fachbuchverlag" isbn="3446151036"/>
<outline text="Bach, Maurice J." author="Maurice J. Bach" title="Design of the UNIX Operating System" publisher="Prentice Hall PTR" isbn="0132017997" year="1986"/>
</outline>
</body>
変換したいXML形式は次のとおりです
<list>
<books text="A">
<book>
<text>Abelson, Harold</text>
<author>Harold Abelson</author>
<title>Struktur und Interpretation von Computerprogrammen. Eine
Informatik-Einführung</title>
<publisher>Springer Verlag</publisher>
<isbn>3540520430</isbn>
<year>1991</year>
</book>
<book>
<text>Abrahams, Paul W.</text>
<author>Paul W. Abrahams</author>
<title>Tex for the Impatient</title>
<publisher>Addison-Wesley Pub Co</publisher>
<isbn>0201513757</isbn>
<year>2000</year>
</book>
</books>
<books text="B">
<book>
<text>Bach, Fred</text>
<author>Fred Bach</author>
<title>UNIX Handbuch zur Programmentwicklung</title>
<publisher>Hanser Fachbuchverlag</publisher>
<isbn>3446151036</isbn>
<year />
</book>
これが私のコードです
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="body">
<list> <xsl:apply-templates select="outline"/> </list>
</xsl:template>
<xsl:template match="outline">
<books text= "{@text}">
<book><xsl:apply-templates select="outline"/>
<text><xsl:value-of select="@text" /></text>
<author><xsl:value-of select="@author" /></author>
<title><xsl:value-of select="@title" /></title>
<publisher><xsl:value-of select="@publisher" /></publisher>
<isbn><xsl:value-of select="@isbn" /></isbn>
<year><xsl:value-of select="@year" /></year>
</book>
</books>
</xsl:template>
</xsl:stylesheet>
これが私のコードの出力です。
<list>
<books text="A">
<book>
<books text="Abelson, Harold">
<book>
<text>Abelson, Harold</text>
<author>Harold Abelson</author>
<title>Struktur und Interpretation von Computerprogrammen. Eine
Informatik-Einführung</title>
<publisher>Springer Verlag</publisher>
<isbn>3540520430</isbn>
<year>1991</year>
</book>
</books>
私の出力には2つの余分な要素があります
<books text="Abelson, Harold">
<book>
私の知る限り、これはこのコード行が原因である可能性があります。私はいくつかの異なる方法を試しましたが、うまくいきませんでした
<xsl:template match="outline">
<books text= "{@text}">
追加の質問: 元の XML ファイルにタイトルが含まれている場合。頭と称号の消し方。私の現在のコードは、新しい XML ファイルで「tmp」を生成します。
<opml version="1.0">
<head>
<title>tmp</title>
<expansionState></expansionState>
</head>
<body>
<outline text="A">
<outline text="Abelson, Harold" author="H