Javaでフリーフォマット的なXMLをCSV形式に変換したいのですが
XMLの形式が固定ではない為、XSL等は使用できません。

DOMまたはSAXで処理を行おうと思っているのですが
出力したいCSVの形式がSQLを外部結合したような
くり返しを行いたいのですが、どのようにしたらいいでしょうか?

くり返しのくり返し等ロジックが思い浮かびません。
何かヒントでもいいのでお願いいたします。

例)
XML
----------------------------------------
<会社>
<事業部>
<事業部名>テスト1事業部</事業部名>
<部>
<部名>テスト1部</部名>
<課>
<課名>第1開発課1</課名>
<課名>第2開発課1</課名>
</課>
</部>
<部>
<部名>テスト2部</部名>
<課>
<課名>第1開発課2</課名>
<課名>第2開発課2</課名>
</課>
</部>
</事業部>
<概要>
<A>
<A1>テストA1</A1>
<A2>テストA2</A2>
</A>
</概要>
</会社>
----------------------------------------
欲しいCSVの結果
事業部名,部名,課名,A1,A2
テスト1事業部,テスト1部,第1開発課1,テストA1,テストA2
テスト1事業部,テスト1部,第2開発課1,テストA1,テストA2
テスト1事業部,テスト2部,第1開発課2,テストA1,テストA2
テスト1事業部,テスト2部,第2開発課2,テストA1,テストA2

このQ&Aに関連する最新のQ&A

A 回答 (1件)

完全フリーフォーマットなのよね。


そしたらベタにやっていくしかないわよ。

この場合なら
事業部のリスト
部のリスト
Aのリスト
の3つを用意して
あとは3つのループをネストする
これがスマートかしら。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やっぱりベタな方法しかないですか。。。
もう少し考えて見ます。

お礼日時:2009/05/28 22:04

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q大量のCSVファイルをExcel形式に変換する

お世話になります。
大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい
と考えております。
リネームソフトを使って、(.csv)⇒(.xls)の一括変換を
したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
(↑ファイル名とシート名が同期を取っているので)

このCSVを確実にエクセル形式へと変換したいのですが、
どなた様かいいお考えをお持ちでしたら教えてください。
ググってみたところ、そういったアドインがあるのですが、
できれば費用をかけずに行いたいです…。

Aベストアンサー

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの作ったアドインは、押しなべて、あまり出来の良いものが少ないように思います。ですから、なるべく、一般のマクロで解決するように望みます。


'---------------------------------------------------

'<標準モジュール>
Sub CSV2XLS()
  'CSV を XLS に変換するマクロ
  Dim myArray() As String
  Dim FileName As Variant
  Dim fn As Variant
  Dim xlFileName As String
  Dim xlFileBaseName As String
  Dim TextLine As String
  Dim FileNo As Integer
  Dim i As Long
  Dim k As Long
  '基本となるフォルダ
  'BASE_DIR=""なら、マクロのあるブックと同じ場所のフォルダ
  Const BASE_DIR As String = ""
  If BASE_DIR <> "" Then
   ChDir BASE_DIR
   Else
   ChDir ThisWorkbook.Path
  End If
  FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv", MultiSelect:=True)
  If VarType(FileName) = vbBoolean Then
   Exit Sub
  End If
  Application.ScreenUpdating = False
  For Each fn In FileName
   On Error GoTo NextStatus
   With Workbooks.Open(fn)
     xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & ".xls"
     Do
      k = k + 1 '同名の時枝番をつける
      If k > 3 Then Exit Do
      If Dir(xlFileName) = "" Then
        .SaveAs xlFileName
        xlFileBaseName = Mid$(xlFileName, InStrRev(xlFileName, "\") + 1)
        Workbooks(xlFileBaseName).Close False
        k = 0
        Exit Do
        Else
        xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & "_" & CStr(k) & ".xls"
      End If
     Loop
   End With
NextStatus:
  Next fn
  Application.ScreenUpdating = True
  MsgBox "終了しました。",64
End Sub

'---------------------------------------------------

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの...続きを読む

Q間へスクリプト結果の表示

下記のスクリプト(現在のURL表示)を<a href>~</A>の間に表示させることは可能でしょうか。


<スクリプト>
<SCRIPT LANGUAGE=javascript>
<!--
document.write( location.href );
// -->
</script>


<a href="───ここに───;sort=up1">▼</A>
<a href="───ここに───;sort=down1">▲</A>

Aベストアンサー

方法はいろいろあると思いますが、たとえば、

<a href="#" id="ancU">▼</a>
<a href="#" id="ancD">▲</a>
<script type="text/javascript">
<!--
var thisLoc = window.location.href;
document.getElementById("ancU").src = thisLoc + ";sort=up1";
document.getElementById("ancD").src = thisLoc + ";sort=down1";
// -->
</script>

または、

<script type="text/javascript">
<!--
var thisLoc = window.location.href;
document.write('<a href="' + thisLoc + ';sort=up1">▼</a>');
document.write('<a href="' + thisLoc + ';sort=down1">▲</a>');
// -->
</script>

方法はいろいろあると思いますが、たとえば、

<a href="#" id="ancU">▼</a>
<a href="#" id="ancD">▲</a>
<script type="text/javascript">
<!--
var thisLoc = window.location.href;
document.getElementById("ancU").src = thisLoc + ";sort=up1";
document.getElementById("ancD").src = thisLoc + ";sort=down1";
// -->
</script>

または、

<script type="text/javascript">
<!--
var thisLoc = window.location.href;
document.write('<a href="' + thisLoc + ';sort=up1">▼</a>');
d...続きを読む

QエクセルデータからCSVファイルへの変換について

現在エクセルファイルにあるデータをCSVファイルへ変換する作業(エクセルでデータを作成して、保存時にCSVファイルを選択)をしているのですが、以下の例の場合うまく変換ができません・・・。
基本的な質問かもしれませんがどなたかご存知でしたら教えていただけると助かります。
よろしくお願いします。

【例】
        (エクセル) ⇒  (CSV)

うまくいく   12345     12345

うまくいかない 01234     1234


上記のようにエクセル上は文字列で管理されている
ケースだとCSVファイルに変換した時数列に変換
され、上記例のうまくいかないケースのように
頭に0がある場合CSVだと0が消えてしまいます。

よろしくお願いします。

Aベストアンサー

> CSVファイルに変換した時数列に変換

ちがいます。
いったんCSVで保存したものをエクセルで開いたときにそうなるのです。
CSVをエクセルでそのまま開かず、メニューの「データ」、「外部データの取り込み」、「すべてのファイル」、で取り込み、書式で文字列を選べばOKです。
あるいはCSVを拡張子を.TXTにしてテキストで取り込んでもOK

Q 内に書くことはできません」

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてしまいます。
エラーが表示されるタグは下記のようなものです。

<script type="text/javascript">
document.write('<img src="http://~/w3a/writelog.php?ref='+document.referrer+'" width="1" height="1" />');
</script> >

アクセスログは普通に取得できているので問題ないのですが、もし上記エラーを回避する方法があればご教授下さい。よろしくお願いします。

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてし...続きを読む

Aベストアンサー

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタグがエスケープされていないため、これがスクリプトの一部ではなく文書構成要素だと判断されるからです。XHTML 1.0 のスキーマは、script 要素内に img 要素が出現することを許していません。もちろん、スクリプトとしても正しく動作しません。

従って、XML のルールに従ってエスケープする必要があります。特に「<」と「&」は必ずエスケープしなければなりません。

document.write('&lt;img .... />');

ですが面倒なことに、「ニセモノの XHTML」ではこれが動作しなくなります。「ニセモノの XHTML」は、HTML との互換性のために script 要素内の「<」「&」をうまく扱ってくれるのですが、それが仇となり、上記では「&lt;」が「<」に戻りません。

ならば、コメント区間にするのはどうでしょう。XML でもコメント内なら「<」「&」が現れても大丈夫です(ただし「--」だけは駄目です)。

<script type="text/javascript"><!--
document.write('<img .... />');
//--></script>

「ニセモノの XHTML」ならこれでも構いません。しかし、「ホンモノの XHTML」では、コメントは本当に破棄されてしまい、上記では動作すらしなくなります。

そこで、XML/HTML のルールを使わず、JavaScript のルールでエスケープすることを考えます。

document.write('\u003Cimg .... />');

これなら大丈夫でしょう。XML/HTML に限らず、言語が混在する際は必ず適切なエスケープを施す必要があります。エスケープを避けたければ外部スクリプトにして下さい。


なお、ここには別の問題があります。そもそも「ホンモノの XHTML」では、document.write を使用できません。これは HTML 互換の機能だからです(HTML5 に明記されています)。

XHTML を採用するのであれば、それが「ホンモノ」でも「ニセモノ」でも大丈夫なよう、document.write に頼らないコードを作成して下さい。あるいは try...catch で括るなどして、「ニセモノ」として処理されたときのみコードが動作するよう工夫して下さい。あるいはいっそ、XHTML を止めるのも 1 つの選択でしょう。

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタ...続きを読む

QCSVファイルをEXCELに変換の自動化作業

CSVファイルをEXCELに変換の自動化作業
{CSVファイルをEXCELに変換するため、
excel  ツールバーよりデータ(D)→外部データの取り込み(D)→テキストファイルのインポート→ファイルの種類変更→全てのファイル→○○.csvのファイル指定→“,”の区切り選択、、ウィザードに従って変更し次へで進む→A1が指定されるのでそのまま完了→CSVがEXCELファイルに変換された。
参照したabc1.csvの名前に対して新しいabc1.xlsとなずけて登録する。これらの作業をMYドキュメントのhenkan ホルダーに入っているCSVファイルに同様に作業して同じくhenkan ホルダーに入れる。}
上記の{ }内の作業を何か,excelのVBAのマクロのようなもので実行することはできませんか。
やり方を教えてください。

Aベストアンサー

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませんので、後々のためにコードを掲示しておきます。以下は、私が考えていたコードであって、その処理後の状態を保証するものではありません。

'<標準モジュール推奨>
Sub DirectryCSV2XLS()
  Dim myCSVFnames() As String
  Dim myCSVFname As String
  Dim xlFileName As String
  Dim i As Long
  Dim j As Long
  Dim n As Variant
  Dim msg As String
'=====================================
  '以下 フォルダー要設定
  Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\"
'=====================================
  If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": Exit Sub
  If Dir(MY_FOLDER, vbDirectory) = "" Then _
   MsgBox "そのフォルダーは存在しません。", vbCritical: Exit Sub
 
  myCSVFname = Dir(MY_FOLDER & "*.csv")
  Do While myCSVFname <> ""
   ReDim Preserve myCSVFnames(i)
   myCSVFnames(i) = myCSVFname
   i = i + 1
   myCSVFname = Dir()
  Loop
  If i = 0 Then MsgBox MY_FOLDER & " には、CSVファイルが存在しません。", vbCritical: Exit Sub
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  For Each n In myCSVFnames
   xlFileName = Mid$(n, 1, InStrRev(n, ".csv")) & ".xls"
   If Dir(MY_FOLDER & "\" & xlFileName) = "" Then
     With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)
      .SaveAs MY_FOLDER & xlFileName
      Workbooks(xlFileName).Close False
      j = j + 1
     End With
   End If
  Next n
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  If i <> j Then msg = "既に" & CStr(i - j) & "個のCSV ファイルは、XLSに変換されています。"
  MsgBox i & "個のCSVの内、" & j & "個のファイルをXLSに変換しました。" & vbCrLf & msg
End Sub

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませ...続きを読む

Qメモ帳のURLっぽい文字列を挟みたい

メモ帳などに大量にあるhttp://www.diamondblog.jp/degawablog/やttp://www.diamondblog.jp/degawablog/という文字列を<a href="http://www.diamondblog.jp/degawablog/" target="_blank">http://www.diamondblog.jp/degawablog/</a>というように変換する方法を教えてください。

用途はブログの日記を書く上でリンクを大量に変換する作業を効率的に行うためです。

Aベストアンサー

「メモ帳」の置換機能を使うのでは間に合わないくらいあるのでしょうか?
「メモ帳」を開いて、メニューバーから[編集]⇒[置換]をクリック。
「検索する文字列」欄にhttp://www.diamondblog.jp/degawablog/と入力します。
「置換後の文字列」欄に、<a href="http://www.diamondblog.jp/degawablog/" target="_blank">http://www.diamondblog.jp/degawablog/</a> と入力してから[次を検索]ボタンを押し、該当する箇所が選択されたら[置換して次に]ボタンを押します。
これで必要な箇所を確認しながら置換えていくか、判りきっているなら[すべて置換]ボタンで一気に置換えもできますけど。

QCSVをExcelに変換したい

お世話になります。

CSVファイルをExcelファイルに変換する場合、CSVファイルをExcelで開いて拡張子を「xls」もしくは「xlsx」を指定して保存すればよいかと思いますが、PCにExcelがインストールされてない環境の場合、Excelに変換することは不可能でしょうか。

今回、Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

なので、インポートする前準備としていったんExcelに変換したいと考えているのですが。。そのPCにExcelがインストールされてないと、やはり変換することは出来ないでしょうか。

もしくは、カンマ区切りのCSVファイルをタブ区切りに変換したりすることは出来ますでしょうか。

ご教授の程、宜しくお願い致します。

Aベストアンサー

>Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

毎回同じCSVのフォーマットだったら
(項目数やデータ型など)
一度インポートウィザードで進めて行って
設定ボタンから定義を保存し
次回からはその定義名を使用してインポートしては?
VBAならDocmd.transferText のヘルプにあるSpecificationNameに定義名を入れます。
・・・じゃダメかいな?

>インポートする前準備としていったんExcelに変換したい
CSVファイルを直接開くとExcelのお節介機能で
電話番号などの前ゼロがなくなったり、ハイフン付きのデータが日付と解釈されたり・・・
ということががあるので、拡張子CSVをTxtに変えてから
Excelで開こうとするとウィザードが立ち上がって・・・と出来ますが
結局のところ二度手間です。

ご参考まで。

Q【jQuery】で表示が違う

よろしくお願いします。
jQueryで、<a>タグと<area>タグで表示が違ってしまいます。

http://colorpowered.com/colorbox/core/example2/index.html
上記ページの「Fade Transition」というjQueryを使ってみたのですが、

<a href="○○.jpg" rel="example2" title="タイトル">文字</a>ではうまく表示できました。
<a href="○○.jpg" rel="example2" title="タイトル"><img src="□□.jpg" width="100" height="100" /></a>でもうまく表示できました。
クリッカブルマップを使って、画像の一部だけリンクさせる場合がうまくいきません・・。

<area shape="poly" coords="14,33,33,-4,57,0,63,29,46,64,30,66" href="○○.jpg" rel="example2" title="タイトル" accesskey="A" />

上記のように記述した場合、クリッカブルマップはうまく動いて、jQueryも一応表示されるのですが、
左上の ←→× (prev、next、close)ボタンがうまくいかないのです・・・。
添付画像のように、
・prev、nextの矢印は表示されません。
・「前へ」、「次へ」の動きもしません。
・closeの×ボタンは表示されるのですが、何回かクリックしないと閉じません。

CSSはこれで、 http://colorpowered.com/colorbox/core/example2/colorbox.css
jsはこれです。 http://colorpowered.com/colorbox/core/colorbox/jquery.colorbox.js

多分jsの方の記述に修正が必要なのかなと思っているのですが、
もしわかる方いらっしゃいましたら、教えていただきたいと思います。
jQuery初心者で恐縮なのですが、よろしくお願いいたします。

よろしくお願いします。
jQueryで、<a>タグと<area>タグで表示が違ってしまいます。

http://colorpowered.com/colorbox/core/example2/index.html
上記ページの「Fade Transition」というjQueryを使ってみたのですが、

<a href="○○.jpg" rel="example2" title="タイトル">文字</a>ではうまく表示できました。
<a href="○○.jpg" rel="example2" title="タイトル"><img src="□□.jpg" width="100" height="100" /></a>でもうまく表示できました。
クリッカブルマップを使って、画像の一部だけリンクさせる場合がう...続きを読む

Aベストアンサー

>> No.1 お礼

http://colorpowered.com/colorbox/

$(document).ready(function(){
//Examples of how to assign the ColorBox event to elements
$("a[rel='example1']").colorbox();
...
});

No.1で提示したコードはjsファイルではなく、htmlに記述されているこの部分のことです。

<map id="map1" name="map1">
<area ...>
...
</map>

id属性に"map1"を持つmap要素が内包するarea要素すべてがグループ化されます。

$(document).ready(function(){
$('#map1 area').colorbox({ rel: 'area1', transition: 'fade' });
});

QCSV形式に変換

プログラミング(C言語)で、ファイルの内容をCSV形式に変換し、指定した出力ファイルに出力するプログラムを作成せよ。という課題がありましたが、
ファイルの内容をCSV形式に変換
がわかりません。どのようなプログラムをかいたらよいのでしょうか?

Aベストアンサー

#5です。
よく見たらフィールド内での入れ替えが居るようなので、
#5で書いたやり方ではできませんね。。。
#参考だしいいのかな。。。

読み込みを一行ずつにして、
中を入れ替えて・・・
という作業が必要になります。

Q

javascript初心者です。
元々使われていたjavascriptです(動作確認済み)
これを他の箇所にも利用しようとしてるのですが
文法的に間違っているような・・・どうでしょう?
------------------------------------------
<a href="javascript:wopen('pict.php?pic=○○',○○,○○)">
<noscript><a href="○○" target="_blank"></noscript>
<img src="○○" alt="画像拡大">
</a>
------------------------------------------
また、javascriptは、現在ここ一箇所だけなのですが、
わざわざ利用しないほうがいいのかも?
とも思いますが、どうでしょう?

Aベストアンサー

元の記述方法はタグの入れ子の対応とか文法違反が色々あります。

<a href="○○" onclick="wopen('pict.php?pic=○○',○○,○○);return false;" target="_blank"><img src="○○" alt=""></a>
こんな書き方でもいいかも。
・javascriptが使える環境ならwopenを実行し、hrefの内容へのジャンプはキャンセル。
・javascriptが使えない環境なら通常通りhrefの内容にジャンプ。


人気Q&Aランキング