重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Jaxpのxmlパーサを使い、xmlからxmlに変換するプログラムを作っています。分からないことがあるのでぜひ教えてください。
例えば、
<book bookid="001">
<hon name="abc" />
<hon name="def" />
</book>
<book bookid="002">
<hon name="ghi" />
</book>
などというxmlからhonのnameがabcというものを探し、
あれば、"abc"とそのbookidの"001"を取り出す方法はどうすればいいでしょうか?
abcは取り出せたのですが、それに対応するbookidが取り出せなくて困っています。
わかりづらくてすみません・・・。

A 回答 (3件)

<result>


 <book>
  <name>abc</name>
  <id>001</id>
 </book>
 <book>
  <name>def</name>
  <id>001</id>
 </book>
 <book>
  <name>ghi</name>
  <id>002</id>
 </book>
</result>

上記のような結果を得るためのXSLTは、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:template match="/">
  <result>
   <xsl:for-each select="root/book/hon/@name">
    <book>
     <id><xsl:value-of select="../../@bookid" /></id>
     <name><xsl:value-of select="." /></name>
    </book>
   </xsl:for-each>
  </result>
 </xsl:template>
</xsl:stylesheet>

このXSLTを実行するにはJavaのTransformerを使用する必要があります。
詳しくは、下の参考ページをご覧下さい。

XSLTを使用しないで、Javaだけでやる方法もありますが、要素を生成したりする処理がめんどくさいので、XSLT変換が一番スッキリいく方法です。

参考URL:http://www.hellohiro.com/xslt.htm
    • good
    • 0

ご質問の趣旨に合っていないかもしれませんが、xsltでhtml出力してみたので参考になればうれしいです。


入力XML
<?xml version="1.0" encoding="Shift_JIS"?>
<books>
<book bookid="001">
<hon name="abc" />
<hon name="def" />
</book>
<book bookid="002">
<hon name="ghi" />
</book>
</books>
変換XSL

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/">
<html><body><table>
<xsl:apply-templates/>
</table></body></html>
</xsl:template>
<xsl:template match="book">
<xsl:for-each select="hon">
<xsl:if test="@name='abc'">
<tr><td>
<xsl:value-of select="@name"/>
</td><td>
<xsl:value-of select="../@bookid"/>
</td></tr>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
    • good
    • 0

質問の意図が分りづらいので、補足してください。


入力のXMLは分りましたが、変換後に出力したいXMLを示してください。

質問の内容から推測すると、変換後の出力XMLは、以下のような感じでしょうか。
<result>
 <book>
  <name>abc</name>
  <id>001</id>
 </book>
 <book>
  <name>def</name>
  <id>001</id>
 </book>
 <book>
  <name>ghi</name>
  <id>002</id>
 </book>
</result>

この回答への補足

わかりづらくてすみませんでした。
kazfさんが推測したとおりにしたいです。

補足日時:2005/02/07 10:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!