- 締切済み
要素のとりだしかた
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が取り出せなくて困っています。 わかりづらくてすみません・・・。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kazf
- ベストアンサー率100% (1/1)
<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変換が一番スッキリいく方法です。
- tachiwa
- ベストアンサー率34% (25/73)
ご質問の趣旨に合っていないかもしれませんが、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>
- kazf
- ベストアンサー率100% (1/1)
質問の意図が分りづらいので、補足してください。 入力の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さんが推測したとおりにしたいです。