• ベストアンサー

VC6でXMLをパースしたいのですが、皆さんはどうされているのでしょうか?

VC6でXMLをパースしたいのですが、皆さんはどうされているのでしょうか? 基本的に正しいXMLでないとparseしないと思いますが、rubyなどでは簡単に出来るみたいですがCではどのように記述するべきかさっぱりわかりん。 マクロソフトにの何とかという?タイプライブラリを使うとどこかのページで見ましたが、得る覚えです。 基本的に以下のような解析が出来れば十分ですが良い方法がございましたらご教授ください。 <main> <shohin>魚さかな魚</shohin> <comment>魚を食べると</comment> <price>500</price> <date>2007-04-01</date> </main> 以下と同等に処理できるものを探しています。 shohin[] = "魚さかな魚"; comment[] = "魚を食べると"; price = 500; date[] = "2007-04-01";

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

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

仰るとおり、msxmlを使うのが簡単だと思います。 http://www.google.com/search?q=msxml+vc&lr=lang_ja あるいは、expat等のライブラリを用いてもよいですが。 http://expat.sourceforge.net/

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

Cで、ですか? C++で、ですか? Cならexpat,C++ならxercesあたりが有名ドコロのparserです。 # ところで"得る覚え"ってなんですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • XML::LibXMLのfindnodes()で、ワイルドカードを使いたい

    XML::LibXMLでXPathを使いたいのですが、 ワイルドカードの指定がうまくいきません。 要素名に*を当てはめたいのですが、、、、 例えば以下の通りです。 下記XMLのid="1-1"とid="1-2"を抜きだしたいのです。 できればXPathにて指定したいのですが、、、 教えてください。 my $dom = $parser->parse_file($xml_file_str) or die; $x = "//Test/TestText[@id="1-*"]/text()"; $c = $dom->findnodes($x); 解析対象XML <XML> <Test> <TestText id="1-1">テスト1</TestText> <TestText id="1-2">テスト2</TestText> <TestText id="2-1">テスト3</TestText> </Test> </XML>

    • ベストアンサー
    • Perl
  • jQueryの戻り値がうまくいかない・・・

    jQueryでXMLを読み込んでパースした値を戻り値として返す関数を作っているのですが、なぜか動作しません。 すみませんがどこがいけないのか教えていただけないでしょうか? -- JS ---------------------- function getValueXML(){   var value = "初期値";   jQuery.ajax({     url: "/text.xml",     type: 'get',     dataType: 'xml',     timeout: 1000,     success: parse_suc,     error: parse_err   });   function parse_suc(xml){    value = $(xml).find("hoge").text();   }   function parse_err(){    alert("XMLの取得に失敗しました");   }   return value; } -- test.xml --------------------- <?xml version="1.0" encoding="UTF-8"?> <root>   <hoge>テスト</hoge> </root> このgetValueXML関数を実行すると戻り値には"初期値"が返ってきます。 試しにparse_suc関数を以下のようにしてみたら"テスト"がアラート表示されました。 つまりparse_suc関数内ではXMLのパースがうまくいっているようなのです。 function parse_suc(xml){   value = $(xml).find("hoge").text();   alert(value); } しかしparse_suc関数を出るとvalueにはその値が引き継がれません。 valueのスコープがjQueryだとどういう風になっているのかよくわからなく、ずっと悩んでいます。 お手数ですがおわかりの方がいましたらご説明頂ければと思います。

  • 文字列のDateFormatへのパース

    とても単純なことを私が誤解しているのだと思うのですが、 文字列のDateFormatへのパースに関して、  DateFormat f = new SimpleDateFormat( "yyyy.MM.dd 'at' HH:mm:ss" );  try {   f.parse( "2001.07.04 at 12:08:56" );  } catch (ParseException e) {   e.printStackTrace();  } この形式だと正しくパースできるのですが、アルファベットの月や曜日が 含まれた下のような形式では、  java.text.ParseException: Unparseable date: "Wed, Jul 4, '01" 例外が発生してしまいます。  DateFormat f = new SimpleDateFormat( "EEE, MMM d, ''yy" );  try {   f.parse( "Wed, Jul 4, '01" );  } catch (ParseException e) {   e.printStackTrace();  } この下のデータサンプルはJavadocに掲載されている基本的な例ですので、 エラーになるはずはないのですが、ご助言頂ければ幸いです。

    • ベストアンサー
    • Java
  • Socket + XML

    ・クライアントはサーバへXML形式のクエリを送信し、 ・サーバからXML形式のデータを受け取る という単純なプログラムを実装しています。 しかしサーバ側の、InputStreamを引数とするXMLパースメソッドでwaitしてしまって困っています。 かといって、クライアント側のOutputStreamを閉じると、クライアントのソケット自体も閉じてしまいます。 なるべく一度のコネクションで送受信を終了させたいのですが、よい方法はないでしょうか? 一応、BufferedReaderを利用してXML文章を文字列に落としてから StringReaderをbuilder.parseの引数に与えることで解決出来てはいるのですがスマートではない気がしまして。 [Server側]  ServerSocket server_sock = new ServerSocket(12345);  Socket sock = server_sock.accept();  /* XMLパーサビルダ生成 */  DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = fact.newDocumentBuilder();  /* ドキュメント docIn の解析 */  Document docIn = builder.parse(sock.getInputStream());//ここから動かない(clientがoutputを終了するまで待っている?)  (略)  /* 結果ドキュメント docOut の構築*/  Document docOut = builder.newDocument();  (略)  /* docOut 送信 */  TransformerFactory tfactory = TransformerFactory.newInstance();  Transformer transformer = tfactory.newTransformer();  transformer.transform(new DOMSource(docOut), new StreamResult(sock.getOutputStream()));  sock.getInputStream().close();  sock.getOutputStream().close();  sock.close(); [Client側]  Socket sock = new Socket("localhost", 12345);  /* XMLパーサビルダ生成 */  DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = fact.newDocumentBuilder();  /* クエリドキュメント docOut の構築*/  Document docOut = builder.newDocument();  (略)  /* docOut 送信 */  TransformerFactory tfactory = TransformerFactory.newInstance();  Transformer transformer = tfactory.newTransformer();  transformer.transform(new DOMSource(docOut), new StreamResult(sock.getOutputStream()));  sock.getOutputStream().flush();  //sock.getOutputSream().close();//これにすると、socketが閉じてしまう  /* 結果ドキュメント docIn の解析 */  Document docIn = builder.parse(sock.getInputStream());//サーバから結果が送信されないので、クライアントはここで停止  (略)

    • ベストアンサー
    • Java
  • JavaでのXMLパーサの使用について

    javaでパーサを使ってDOMツリーを作成したいのですが、パーサインスタンスが作成できずにエラーがでてしまいます。ちなみにコンパイルは通ります。 以下にソースとエラー内容を記述しますので、もしよろしかったらどなたか教えて下さい。 import java.io.*; import com.ibm.xml.parsers.*; import org.xml.sax.*; import org.w3c.dom.*; public static void main(String[] args){ try{      //XML文書作成 String xml = "<sample>Hello Java World</sample>"; //DOMパーサ作成 DOMParser parser = new DOMParser(); //入力ストリーム作成      StringReader sr = new StringReader(xml); InputSource is = new InputSource(sr); //パースする parser.parse(is); //ドキュメントを得る Document doc = parser.getDocument(); //トップレベル要素を得る Element el = doc.getDocumentElement(); System.out.println("Top Level Element: " + el.getTagName()); } catch(Exception e){ e.printStackTrace(); } } エラー内容: java.lang.NoClassDefFoundError: com.ibm.xml.parsers.DOMParser java.lang.Throwable(java.lang.String) java.lang.Error(java.lang.String) java.lang.LinkageError(java.lang.String) java.lang.NoClassDefFoundError(java.lang.String) void pkxml.dom.PsDomBean.makedom() void pkxml.dom.PsDomBean.makedom() void pkxmlsutabu.Sutabu.main(java.lang.String [])

  • PHP+MySQLでXMLを作成し、それをいくつか連結したものを返す方

    PHP+MySQLでXMLを作成し、それをいくつか連結したものを返す方法を教えてください。 HTML ↓(1)httpリクエスト,パラメータ (2)main.php(XML化メイン処理) XMLデータ送信→ HTML ↑ ↑ ↑ ↓ ↓ ↓ (3)xml_1.php xml_2.php xml_3.php(XML生成子処理) ↑ ↑ ↑ ↓ ↓ ↓ DB (2)main.phpでHTMLから受け取ったコマンドを元に生成するXMLの取得を振り分ける。(switch文) (3)各phpでDBからデータを取得しXML形式にする。 (4)main.phpでそれぞれのXMLを連結し送信。 というのがやりたいことなんですけど、 ・SQLからデータを取得し、XMLにする方法 ・メイン処理でそれぞれを連結する方法 がわかりません。 main.php <?php function xml_main($cmd, &$xml ){ global $log4php,$con,$debugMode; $result = false; $dbErrMsg; // DB Open openDb(); dbErr(); // log4phpオブジェクト //$log4php = new log4php('log4php_xml.properties'); // トランザクション開始 mysql_query('BEGIN'); $log4php->debug('トランザクション開始'); /* try{ // 文字コード変換(ujis=EUC-JP) // TIPS デフォルトの文字コードがEUCだった場合は以下の二行を削除してください。 $sql = "SET NAMES utf8"; $result = @mysql_query($sql); } */ // XML Header生成 // コマンド毎の呼び出し switch($cmd){ case 0: xml_1.phpとxml_2.phpで生成したxmlを連結 break; case 1: xml_1.phpとxml_3.phpで生成したxmlを連結 break; case 2: xml_2.phpとxml_3.phpで生成したxmlを連結 break; default: break; } // XML基本情報タグ生成 // XML Footer生成 // DB Close closeDB(); } ?> xml_1.php <?php function xml_1($id,$member,$msg,&$xml){ //DBからデータを取得 //xmlを作成 } ?> という感じでやろうとしてるんですが。 xml_1.php xml_2.phpで文字列をreturnしてmain.phpでSimpleXMLで連結させるというのも方法として書いてあったんですが、 具体的なやり方がわかりません。 環境はPHP5.1 MySQL5です。

    • ベストアンサー
    • PHP
  • VBでXMLファイルを作成していますが、エラーになります

    すみません、教えてください。 VB6でXMLファイルを作成しています。コメントを入れようとすると"!--"の文字でこけます。どうしたらいいのでしょうか?コーディングは以下のようにしてます。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 garFNRpt = sFPass + "Sousinfile\DATA\" + sFilemei + ".xml" 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, """!--""kml基本情報", "")) よろしくお願いします

  • Ruby正規表現で複数の文字列にマッチさせる方法

    基本的な質問で恥ずかしいんですが、 Rubyでhtmlの中から.rdfか.xmlで終わるURLを取り出そうとして以下のようにしているんですが、 xmls = html.scan( /http\:\/\/[^\\\'\|\`\^\"\<\>\)\(\}\{\]\[\]\ ]+\.xml/ ) rdfs = html.scan( /http\:\/\/[^\\\'\|\`\^\"\<\>\)\(\}\{\]\[\]\ ]+\.rss/ ) feeds = xmls + rdfs これを一行で書ける正規表現を教えて下さい。 ハマって抜けだせません。よろしくおねがいします。

    • ベストアンサー
    • Ruby
  • VC++2010 expressでファイル操作

    VC++2010 expressでテキストファイルを開いて、文字を1個ずつ読み取っていくプログラムを作りたいのですが、VCではどのようにファイル操作を行うのかがわかりません。以前使っていたCでは、 int main(){    FILE *fp    fp=fopen("test.txt","r") if( fp == NULL ){    printf( "%sファイルが開けません¥n", fname );    return 0;    } /* 以下に処理が続く */ とやっていたのですが、VC++ 2010 expressでフォームに実行ボタンを1つ作って、 Form1.hを開き以下のように書いて実行するとエラーが出ます。 #pragma once namespace サンプル{  /* (中略) */ #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { FILE *fp;       fp = fopen("test.txt", "r" ); if( fp == NULL ){    msgbox *fname+L"ファイルが開けません";    return 0; } } }; } 既にFILEの宣言からおかしいみたいなのですが、 どのように書けば正解なのでしょうか? 具体的なコードとコードを書き込む位置を明示してご教示ください。 #大変申し訳ありませんが、「○×をすればいい」等、具体的なコードが書いていない、 #コードを書く位置を明示していないコメントや、これでは拡張性が無い等の #上級のコメントはご遠慮ください。たぶん読んでもわかりませんので。

  • htmlで記述されたWebページの解析と情報取得

    特定のWebページを取得し、その情報の一部を利用したいと思っています。 そのページはXML形式ではなく一般的なhtml形式です。 今はやり方がわからない為、ブラウザに一旦受けさせて ブラウザの機能でパースしてもらってそれを利用しています。 しかし、スマートではないのでこのやり方から卒業したいと思っています。 (そもそもAjaxじゃないし) これを(一旦html文字列を取得して)何かのJavaScriptライブラリ等を利用して 「getElementsByName…」等を利用できる形のオブジェクトに 変換したいと思っています。 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open('GET', …); … htmlStr = xmlhttp.responseText; // ←これを使う? htmlDom = hoge.parse(htmlStr); htmlDom = xmlhttp.responseHTML; // ←こんな感じのがあれば最高 alert(htmlDom.getElementsByName("…")[0].value); google提供のライブラリに「GXml.parse」というものがあり、 XML文字列をXML DOM 形式にパースするという機能があります。 これのhtml版はないものかと思っているしだいです。 例えば、以下のページ(どちらでもいい)から為替レートを取得したい場合などです。 外為 レート - Infoseek マネー http://money.www.infoseek.co.jp/MnForex/fxrate/ 外為 米ドル/円 - Infoseek マネー http://money.www.infoseek.co.jp/MnForex/fxdetail/?fx=F1001 ※今回の質問は「どこでもいいから為替レートを取得する方法」ではありません。  知りたいのはhtmlのパース方法です。為替はあくまでも例です。 (Webブラウザにレンダリングさせないで) html文字列をparseする方法。(JavaScriptライブラリの使用可) ※html文字列からでなくともいい これを教えてください。よろしくお願いします。

    • ベストアンサー
    • AJAX