• 締切済み

XML文書をjavaを使ってCSV文書に...

プログラム初心者なのですが csv.jpgのような形で、DOM,SAXどちらかを 使って変換したいのですが誰か教えてください。 xmlは -<item_list>- <item code="1"> <name>靴下</name> <maker>マイクロソフト</maker>- <option seq="1"> <attribute name="材質">ナイロン</attribute> <attribute name="サイズ">S</attribute> <attribute name="色">黒</attribute><attribute name="性別">男</attribute><price>500</price> </option>- <option seq="2"> <attribute name="材質">ナイロン</attribute> <attribute name="サイズ">M</attribute> <attribute name="色">黒</attribute> <attribute name="性別">男</attribute><price>500</price> ~ なものが続いてくる形です。 DTDは <?xml version="1.0" encoding="Shift_JIS" ?> <!ELEMENT item_list (item+)> <!ELEMENT item (name+,maker+,option+)> <!ATTLIST item code NMTOKENS #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT maker (#PCDATA)> <!ELEMENT option (attribute+,price)> <!ATTLIST attribute name CDATA #REQUIRED> <!ELEMENT price (#PCDATA)> でやっています。 現在のプログラムの状態は import java.io.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; import javax.xml.transform.dom.*; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; //文書の入出力 class Exam3{ public static void main(String args[]) throws Exception{ SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); //SAXの準備 SampleHandler1 sh = new SampleHandler1(); //パンドアの作成 sp.parse(new FileInputStream("item_list_japan.xml"), sh); //XML文書をロード } } class SampleHandler1 extends DefaultHandler{ //パンドラクラス int YS=0; int YS2=0; int YS3=0; String[] ST= new String[80000000]; int ST1=0; int ab=0; int ab2=0; String tin="null"; StringBuffer sb = new StringBuffer(); //文字列を用意 public void endDocument(){ //文書の終了 try{ //文字列を書き出す PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter("List2.csv"))); pw.println(sb); pw.close(); }catch(Exception e){} } public void startElement(String namespaceURI, String localName, String qName, //qNameは要素 Attributes attrs) { if(qName.equals("item")){ YS = 0; YS2=0; ab2=0; sb.append("商品コード"+","); for(int i=0;i<attrs.getLength();i++){ sb.append(attrs.getValue(i)+","); } }else if(qName.equals("name")){ sb.append("商品名"+","); }else if(qName.equals("maker")){ sb.append("製造元"+","); }else if(qName.equals("option")){ if(YS2==0){ sb.append("オプション"+","); YS2=1; YS3=0; } } if(qName.equals("attribute")){ if(YS3==0){ for(int i=0;i<attrs.getLength();i++){ if(attrs.getValue(i)!=""){ sb.append(attrs.getValue(i)+","); } } YS=1; } }else if(YS==1){ YS3=1; } tin=qName; } public void endElement(String namespaceURI,String localName,String qName){ if(qName.equals("option")){ sb.append("\r\n"); } //tin=qName; if(qName.equals("price")){ if(ab2==0){ sb.append("\r\n"); ab2=1; } sb.append(",,,,"); while(ST[ab]!=null){ sb.append(ST[ab]); ab++; } } } public void characters(char[] ch,int start,int length){ String str = new String(ch,start,length); if(tin=="attribute"){ ST[ST1]=(str+","); ST1++; } } } です。 回答よろしくお願いします。

みんなの回答

回答No.1

変換するにあたってどこがわからないの?

mayumayu0313
質問者

補足

そこを書いてませんでしたすいません 私の現在のプログラムでは、 item codeの属性値 nameの内容 makerの内容 option secの属性値 以外は例の通り表示できているんですが item codeの属性値を指定されているところに表示できなくて困っています。

関連するQ&A