XMLファイルからタグごとバッファにとりだす方法は?

このQ&Aのポイント
  • MS C#2005でXMLファイルをDBに取り込むPGを作っています。XMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出し、いったんバッファ上に確保した上でDB(SQL Server2005)へ取り込みしたいのです。XML的な取り扱いをしながらバッファ操作する方法を探しています。
  • XMLReaderクラスなどで検索しているのですが、思ったような結果が導き出せないでいます。もしかすると、XML操作関連クラスでは実現できないのではないかと思い、少々混乱しています。どういったキーワードで探したらいいのか皆目見当がつきません。
  • XMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出す振る舞いを検索エンジンなどで探しています。解決法(検索キーワードだけでもかまいません)をご教授いただければと思います。
回答を見る
  • ベストアンサー

XMLファイルからタグごとバッファにとりだす方法は?

こんばんわ。 MS C#2005でXMLファイルをDBに取り込むPGを作っています。 困ったことが発生したのですが、調べるにしてもどこからせめてよいのか見当がつかなくなり、どうにもならなくなってしまいました。 以下に簡単ですが、読み込みしたいXMLを記述します。 <?xml version="1.0" encoding="utf-8"?> <XML情報 version="1.0">   <リスト 番号="1">     <概要>       <表示番号>0123456789</表示番号>       <概要タグ2>xxx</概要タグ2>       <概要タグ3>xxx</概要タグ3>         ・         ・     </概要>     <詳細>       <注文>         <アイテム 品目="○○">○○</アイテム>         <アイテム 品目="□□">□□</アイテム>       </注文>     </詳細>   </リスト> </XML情報> 上記のXMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出し、いったんバッファ上に確保した上でDB(SQL Server2005)へ取り込みしたいのです。 ただし、DBへ取り込む際に「<アイテム>」部分の値を一部変更するので(具体的には「品目」属性の値を手直しする)XML的な取り扱いをしながらバッファ操作する方法を探しています。 問題なのは、XMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出す振る舞いを検索エンジンなどで探すにあたって、どういったキーワードで探したらいいのか皆目見当がつきません。 XMLReaderクラスなどの項目で検索しているのですが、思ったような結果が導き出せないでいます。 もしかすると、XML操作関連クラスでは実現できないのではないかと思い、少々混乱しています。 これだけの情報でこちらの意図していることが理解できましたら、その解決法(検索キーワードだけでもかまいません)をご教授いただければと思います。 補足が必要であればお申し付けください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

XMLの大きさにもよるのですが,System.Xml.XmlDocumentを使うことはできませんか。 XmlDocumentはDOMなので,XMLの階層構造をそのまま扱うことができます。 問題点は,全部読み込んでしまうので,対象のXMLが大きいとメモリを食いすぎる可能性があることです。 他には,XmlReaderのInnerXmlで得た詳細要素の内容に開始タグと終了タグを付けてXmlDocumentで扱うとか。 これならば,XMLの一部分しか扱わなくて済むはずです。 が,処理は全部読み込む場合に比べて面倒になります。

参考URL:
http://msdn2.microsoft.com/ja-jp/library/system.xml.xmldocument(VS.80).aspx
heygoro
質問者

お礼

すいません、ご回答いただいたurlを参考に実装実験をしており、返信に時間がかかってしまいました。 XmlDocumentとXmlTextReaderの組み合わせで思い通りの動作を実現できました。 大変参考になりました。 また、似たような問題がでて自分で解決できない状況になりましたらOKWaveに投稿しますので、よろしければご回答にご協力いただければと思います。 どうもありがとうございました。

関連するQ&A

  • XMLへDOMでタグの追加

    次のようなXMLにDOMで、タグを追加しようとしているのですが、 追加される場所が思った所に追加されません。 正常XMLにようにしたいのですが、どうすれば良いでしょうか? --元XML----------------- <root> <item>a</item> <item>b</item> </root> --結果XML----------------- <root> <item>a</item> <item>b</item> <info>xxxx</info> </root> --正常XML----------------- <root> <info>xxxx</info> <item>a</item> <item>b</item> </root> -- プログラム ---------------- MSXML::IXMLDOMDocumentPtr xmlDoc = NULL; MSXML::IXMLDOMNodeListPtr pNodes; MSXML::IXMLDOMNodePtr pNode; MSXML::IXMLDOMElementPtr pElem; xmlDoc.CreateInstance ("Msxml2.DOMDocument"); xmlDoc->load( ファイル名 ); pNodes = xmlDoc->selectNodes(L"/root"); pNode = pNodes->Getitem(0); pElem = xmlDoc->createElement(L"info"); pNode->appendChild( pElem ); 環境:WinXP+IE7+VC6

    • ベストアンサー
    • XML
  • XMLのタグ名に予約語は禁止?

    こんばんは、こんにちは。。 XMLのタグに関してです。 「XMLのタグ名には予約語が禁止です。」 と色々なところに書かれていました。 しかし、テキストファイルで <xml>aaa</xml>(xmlは予約語) と書いてIE6で見ると特に問題なく エラーになりません。なぜでしょうか? また、どこにそのような仕様が書かれているのか ご存知ありませんか? ・例えばその旨について、  以下のところに書かれていました。 1.同カテゴリの質問で。 「XMLのタグ名の禁則文字 」 2.以下のURL http://noribeat.s38.xrea.com/xml/xml20020315.html 他には参考書など。。 ※YAHOO!で「xml タグ 予約語 禁止」と検索すると  上の二つが検索できました。 ご回答よろしくお願いいたします。 以上

    • ベストアンサー
    • XML
  • xmlについて

    xmlでDBを構築しようと思っています。内容は顧客情報をxmlで蓄積して、そのデータを参照・検索できるようなイメージなるかと思います。顧客DBをxmlで構築するイメージです。できるだけ、価格をおさえたいのですが、何かいいソフトは知りませんでしょうか?できれば、フリーのソフトだとありがたいです。ソフト名と価格を教えて下さい。漠然とした質問ですいませんが、よろしくお願いします。

    • ベストアンサー
    • XML
  • ファイルのプロパティのキーワードの使い方

    ファイルのプロパティを開き、概要タグを見ると、タイトルとカテゴリーとか、キーワードとか記入できるようになってますが、あれは、どう使うものでしょうか? なんらかの検索ツールなどでカテゴリー検索とかキーワード検索とか出来るようになるのでしょうか?

  • フォルダ内の複数のXMLファイルの中身をキーワードで検索できるソフトを

    フォルダ内の複数のXMLファイルの中身をキーワードで検索できるソフトを探しています。 キーワードを含むファイルを表示させたいと考えております。 例えば“March”というキーワードがフォルダ内の複数のXMLファイルに含まれているかどうかを知ることができる検索ソフトはございますでしょうか?

  • XMLファイルからの条件付抽出

    初めまして。 私はPHPの初心者なのですが、あるスクリプトを組むことになり、どうしてよいかわからずこちらに質問させていただきます。 スクリプトの内容としては あるWEBサイトにて、最新の情報を表示させるというものです。 『最新の情報』というものがディレクトリ./TESTに対しXMLファイルとして配信されます。 ところが厄介なことにこのファイルは『表示すべき情報以外』の場合も有ります。 表示させるべきか表示させないかのKeyはこのファイルの全てを読み込み、タグ<test></test>というタグに囲まれた文字列がkeywordになります。もしマッチした文字列がある場合はこのtestタグ要素と同じツリー上にある要素・属性部分を抜き出して表示させるということになります。 あと、keywordが送られてきたファイル内に無い場合は echo "現在情報はありません";と入れたく思っております。 サーバー環境はPHP4.3.10です。 DOMはサーバーの仕様で使用できないです。 指針や流れ等でも結構ですので、情報があればお願いいたします。

    • ベストアンサー
    • PHP
  • XMLのタグの有無をPHPで判定したい。

    example1.xml ----------------------- <item>  <color>red</color>  <omake>candy</omake> </item> ----------------------- example2.xml ----------------------- <item>  <color>black</color> </item> ----------------------- 上記はXMLファイルの2パターンを示したものです。 商品(item)によって、オマケ(omake)があったりなかったりします。 オマケがない時には、タグ自体存在しません。 なので、タグがない時に、そのデータをDOMで取得しようとすると、 エラーが吐かれます。 Notice: Trying to get property of non-object in~~~ 私がしたいことは、 タグがない場合には、値を取得しない。 という分岐をさせることです。 例えば、 $items = $doc->getElementsByTagName('color'); if(isset($items)){echo $items->item(0)->nodeValue;} こんな感じで考えたのですが、ダメでした。 タグが無くても、$itemsはNULLではないため、 if文の中に入ってしまい、 結局、$items->item(0)->nodeValue; を通過しようとして、 Notice: Trying to get property of non-object in~~~ が吐かれます。 ($itemsは、object(DOMNodeList)#3 (0) { }といった内容で、NULLではない。) また、 if(isset($items->item(0)->nodeValue)){  echo $items->item(0)->nodeValue; } のようにすると、 isset()のところで、やはり、 $items->item(0)->nodeValue を通過しようとして、 Notice: Trying to get property of non-object in~~~ が吐かれます。 こういった場合、どうしたら良いのでしょうか。 宜しくお願いします。 (PHP5の環境です。)

    • ベストアンサー
    • PHP
  • jQueryでxmlの異なるタグ要素を取得したい。

    jQueryを最近勉強したての者です。 詳しい方、どうか教えて下さい。 HTMLにxmlのデータを読み込ませようとしています。 概略をお話しすると、 htmlファイルによって、xmlの別々の要素を取得したいのです。 やりたいメソッドは同じです。 別々の要素の中のデータによって、imgの表示/非表示を切り替えたいのです。 問題は、対象となるhtmlファイルが複数あり そのhtmlファイルによって、参照するxmlのタグが異なる事なんです。 xmlは、以下のように<shopdata>をルートノードとし、以下のような感じです。 --------------------- <?xml version="1.0" encoding="utf-8"?> <shopdata> <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> </shopdata> --------------------- <name*>~</name*> の中のデータは、0もしくは1なのですが 0の時はimgを表示 1の時はimgを非表示させようと考えています。 ただ<name1><name2><name3> とタグ名がバラバラなんです。 ※おしりの数字が違うだけで、規則的ではあります。 ちなみにhtmlは複数あって  a.htmlの時は→xmlの<name1>を参照  b.htmlの時は→xmlの<name2>を参照  c.htmlの時は→xmlの<name3>を参照 という感じです。 ※htmlファイル名は特に規則的ではなく、いろいろなファイル名がついています。。。 最初、考えたのは、 htmlのどこかに、id="1"と入れて、idが1の時は、<name1>の要素を取得し、 htmlのどこかに、id="2"と入れて、idが2の時は、<name2>の要素を取得し… っていうことを考えたのですが、それもどのように書いたら良いのかが分からないんです。 そもそも、そういった事は可能なのでしょうか? ちなみのhtmlのbodyタグ自体がテンプレートでできているので、 idをどこかにふるとしたら、head内とかになるのしょうか? それぞれ、ボタンの表示は、 if文を使って、show(),hide()メソッドを使うとは思うのですが… 詳しくコードを教えていただけたら、助かります。 どうか、宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • XMLファイル中に記述したBRタグが機能しません

    現在以下のようにXMLファイルはなっています。 <data> <text> あいうえお<br /> かきくけこ<br /> さしすせそ<br /> </text> </data> xslファイルの方で、xsl:value-ofでtextタグの内容を取り出しているのですが、あいうえおかきくけこさしすせそと改行されずに表示されてしまいます。 何かを設定すればいいのかなと思うのですが、うまく検索で見つけれず困っています。

    • ベストアンサー
    • XML
  • XMLタグ情報取得

    PHPにxmlファイルのタグ情報を利用するシステムを構築したいのですが、調べてもよく解らなかったため質問させて頂きます。 PHPは勉強経験があるため解るのですがXMLはまったくの初心者です。 システムは以下の流れです。 システムA(PHP) <?php  $i;  if($iがシステムBで使用されているか確認){   使用されている場合$iで処理  }else{   使用されていない場合xmlファイルからタグ情報取得   for($iの親タグ<B>を取得){    if(<$i><$j><$k>のどれかがシステムBで使用されていないか?){     $jが使用されていた場合、システムAの$iと、システムBの$jは同じ使用用途のデータと判断し処理    }   }  } xmlファイル <?xml version="1.0" encoding="EUC-JP"?> <A> <B> <$i></$i><$j></$j><$k></$k> </B> </A> このようなシステムを構築したいのでご教授お願いします。 違うシステム同士でデータを利用する際、同じ使用用途でもシステムによって名称が異なる場合にも対応できるシステムを課題としています。 また、DOM方式を利用した方法だと助かります。 環境はXP、PHP5、Apache2.0です

    • ベストアンサー
    • PHP