C++でXML(主にxerces)やろう!

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
NGNG
スレ無いしサイト少ないので立ててみる
いらなかったらサゲまくってください
301269
垢版 |
NGNG
>>276
かなり遅れましたが、お世話になったので報告。

結局、xerces+Xalanって方向でやりたい事できました。
それもxerces自体は、Xalanを使うためにいれてくだけって感じです。

Documentなどの読み書き、処理はじつは自前で行う部分がを使ってたんですが、
テストしてる段階で、xercesつかっても要件満たせるんじゃないかと
設計見直し中です。

ども、お世話になりました。
302デフォルトの名無しさん
垢版 |
NGNG
MiX バージョンアップ age
NGNG
誰かMiXの最新バージョン使った人いる?
いたらどんなでした?
NGNG
BCBで無事つかえた。
305デフォルトの名無しさん
垢版 |
NGNG
http://www.efeel.to/survey/xml/
306デフォルトの名無しさん
垢版 |
NGNG
いまXercesC++(Mac)やってるけど、さっぱり。。。
サンプルが動かん。
307デフォルトの名無しさん
垢版 |
NGNG
一ヶ月たったsage
NGNG
MSXML VC++(Win)に変更してはどうか。
サンプルもばっちり動く。
NGNG
>>306
もう知ってるかもしんないけど、PantherからはXML関連のAPI(NSXMLParser)が追加されたよ。

んでこれ、どんな感じなんだろう。使ってみた人いたら感想求ム
NGNG
tinyなアプリならMiXがいちばんよさげ
NGNG
VS2003でstream.h使えなくなってる・・・・・・
XML4Cのコンパイルできなーい!
しょうがないのでMSXMLにnige
312デフォルトの名無しさん
垢版 |
NGNG
あげ
NGNG
DOMをドムと呼ぶのはいいとして、SAXをザクと呼ぶのはやめてくだちい。
NGNG
SAX2はあのジオンの栄光の量産機
315デフォルトの名無しさん
垢版 |
NGNG
MSXML+C++でDOMプログラミングをしているのですが,
タグ名の前に接頭辞をつける方法がわかりません.
CreateNodeは名前空間URIを引数として渡せるのですが,
接頭辞を自動的に振ってはくれませんし,XercessのようなsetPrefix関数もありません.

何か良い方法をご存知の方がいらっしゃいましたら教えてください.
316デフォルトの名無しさん
垢版 |
NGNG
俺的にはXML4Cが好きだな。Xercesは好きくない
317デフォルトの名無しさん
垢版 |
NGNG
XMLはおなかがいっぱいになりまつか?
318デフォルトの名無しさん
垢版 |
NGNG
XercesでDTD通りに要素を挿入するにはどうしたらいいの?
それともファイルに書き出すときに変換するの?
319デフォルトの名無しさん
垢版 |
NGNG
すれ違いかもしれませんが、
Axis使ったことある人いますか?
NGNG
MSXMLパーサに、フルアドレス指定してあるDTDの参照先をローカルに
するAPIってないの?
スタンドアロンのPCじゃ、XML使うなってことなんだろーか。
321デフォルトの名無しさん
垢版 |
NGNG
DOMとSAXってどっちがいいの?
それぞれの特徴を教えてください。
NGNG
SAX : 一度XMLを舐めるだけでいいならこっち(一度読んだ場所へは戻れない一度きり)
DOM : メモリ上にXML文書の内容を表すDOMのオブジェクト共を作るのでSAXよりは重い(ランダムアクセスが可能)
323デフォルトの名無しさん
垢版 |
NGNG
結論:SAX >>>>>>>>> DOM
NGNG
↑のような奴が増える夏到来ですね
NGNG
SAXで自前のデータ構造に読み込み、内部処理。
書き出しはその逆。
これ。
NGNG
>321
それぐらいぐぐって見れ!

http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&q=DOM%E3%81%A8SAX
NGNG
Simple Outline XML >>>>>>>>>>> 普通のXML
328デフォルトの名無しさん
垢版 |
NGNG
SGML >>>>>>>>超えられない壁>>>>>>>> XML
329デフォルトの名無しさん
垢版 |
NGNG
天気予報は既存の配信ビジネスを守るためにRSS配信できない
http://neta.ywcafe.net/000339.html

国民の税金で気象データの収集・解析までしておきながら、
気象庁の官僚の天下り先である
・財団法人 気象業務支援センター
・財団法人 日本気象協会
の利権保護の為、未だ気象庁はRSS配信を拒んでいるのだ。
将来的に行われるであろう地震予知の情報も、有料で国民に販売するつもりだろうか?
NGNG
がんばって探した結果がこのスレか?
XMLスレもあるしRSSならWebProgにある。
つーかRSSっていうより気象庁バッシングしたいなら板違いだろ。
NGNG
>>330
329 は各地にマルチポスとしてるよ。
332デフォルトの名無しさん
垢版 |
NGNG
#include<Xercesc/util/PlatformUtils.hpp>
#include<Xercesc/util/XMLString.hpp>
#include<Xercesc/dom/DOM.hpp>
using namespace std;

XERCES_CPP_NAMESPACE_USE

#define X(x) XMLString::transcode(x)

int main(){
XMLPlatformUtils::Initialize();
{

DOMImplementation *impl= DOMImplementationRegistry::getDOMImplementation(X(""));

DOMDocumentType *doctype = impl->createDocumentType(
X("html"),
X("-//W3C//DTD XHTML 1.1//EN"),
X("http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd") );

DOMDocument *doc = impl->createDocument(NULL,X("html"),doctype);
}
XMLPlatformUtils::Terminate();
return 0;
}
これをVC7でビルドしようとしたんですが
xml error LNK2020: 未解決のトークン (0A000010) __imp_?fgXercescDefaultLocale@XMLUni@xercesc_2_3@@2QBDB
xml error LNK2020: 未解決のトークン (0A000013) __imp_?fgMemoryManager@XMLPlatformUtils@xercesc_2_3@@2PAVMemoryManager@2@A
xml fatal error LNK1120: 外部参照 2 が未解決です。

というエラーが出るんですが、どう対処すればいいのか分からんのです。誰か助けて。Xersescは2.3っす。
333デフォルトの名無しさん
垢版 |
NGNG
DOMってなんであんなに使いにくいんだろう。
XPathサポートしてる実装じゃないととても使う気になれない
NGNG
>>333
極度に移植性を高めた結果でしょ。言語に制約を受けないように。
335デフォルトの名無しさん
垢版 |
NGNG
それにしても例えば要素の子要素をたどるときと要素の属性をたどるときでまったく違うやり方でしょ。
XPathだったら軸がちがうだけで子要素名/属性名をノードテストに使用できる点は一緒なのに、
DOMだと「ある要素のhoge属性の値を取得」だったらgetAttibuteでノードマップをもらって属性名をキーに値をゲットだけど
似たような「ある要素のhoge子要素の値を取得」でまったく違うコードをいっぱい書かなきゃならん。
XPathだったら/@hogeか/hogeかの違いだけだ。
NGNG
>>332
どーやってビルドしようとしたのか、詳しく書かないとわからんヤロ。
Xersescは2.3 の導入方法、vc7はスタンドアロン?(free)、リンカに渡す
pathチェック…。

一番の原因は最後の理由では?(-_-;
337デフォルトの名無しさん
垢版 |
NGNG
C++でxercesを利用すると一体どんな問題が解決されますか?
NGNG
水虫が治ります
339デフォルトの名無しさん
垢版 |
NGNG
MiX、VC.NETでコンパイルとおらねえよ
NGNG
VC++.NETなのかVC#.NETなのかそもそもスレ違いだバカ
341デフォルトの名無しさん
垢版 |
NGNG
C#でやろうとするのはお前だけ
NGNG
>339
typenameをどっかにつけたら通る
でも、そもそもあれだとgccでも通らない気がするけど…
343デフォルトの名無しさん
垢版 |
NGNG
>>342
dクス

えーっと、typenameを付ける場所は二カ所あるです

MiXのバージョンは0.5.3ね

Attribute.h(21)
  typedef nodelist_type::iterator nodelist_iter;
       ↓
  typedef typename nodelist_type::iterator nodelist_iter;

NodeList.h(39)
  typedef container_type::iterator basic_iterator;
       ↓
  typedef typename container_type::iterator basic_iterator;

あと、凡ミスってかcygwinのgcc3.3.1だと平気だけど、VC++7で引っかかる点

Attribute.h(55)
  virtual string_type toString(bool dmy=false,const string_type& dmy=xml_traits::indent(),int dmy2=0)const;
                                          ↓
  virtual string_type toString(bool dmy=false,const string_type& dmy1=xml_traits::indent(),int dmy2=0)const;

引数の名前がダブってる(;´д⊂)
NGNG
>343
> 引数の名前がダブってる(;´д⊂)
そういえばそんなのもあったね(ニガワラ

んでもって、DOMパーサーにXML食わせてパースに失敗したらリソースリークしたり、
(auto_ptrをparseの中に仕組んだりして対処したような)
開始タグを入れる前に終了タグを入れたりしたら(いきなり </> 見たいに)
STLPortのデバックモードで落ちたり…
(空のstackをpopしてたんだっけかな…)

結局途中で断念してしまった…
NGNG
>>344
おとなしくXerces使った方が良いのかも知れんね(´・ω・`)
もうちょっと、MiX使ってみてから判断します
346345
垢版 |
NGNG
感想。

リークはちゃんと調べてないので分かんないけど、
とりあえず、ドキュメントが間違ってるのは何とかして欲しいと思った(;´д`)
まあ、規模はそれなりに小さいので、条件によっては使っても良いんじゃないかと。
347デフォルトの名無しさん
垢版 |
NGNG
ホシュ
NGNG
349デフォルトの名無しさん
垢版 |
NGNG
C++でXMLいじるとなんかアドバンテージあるの?
NGNG
悪いけどそういうスレじゃないんだよね
351デフォルトの名無しさん
垢版 |
NGNG
>>350
(^o^;)
352デフォルトの名無しさん
垢版 |
NGNG
>>350
そういうスレだろ
NGNG
違うって。C++のアドバンテージとか言い出すと他の言語による比較論議になる。
そうするともはやC++で〜スレじゃなくなる。
(C++による)MSXMLとXercesの比較などならわかるが、C++を比較対象にするのはちょっと違う。
C++スレでJavaとの比較議論始まったらウザイだろ。それと同じ。
NGNG
>>349
速い。その代わり文字列処理が面倒になるかな。
やるならJavaとかの方がいいと思うけどね。
NGNG
stringクラスとboost使えばそうでもないよ。
356デフォルトの名無しさん
垢版 |
NGNG
>>354
じゃあスーパープログラマにとってはC++で組んだ方が気持ちいいんですね
NGNG
C++の場合はXercesじゃないほうがいいじゃん。
ちょっと規模が大きいからもっさりしそう。
単純なパーサ作ればそのアプリのデータだけはきびきび処理できるわけで。
NGNG
>>357
MiX小さくて(・∀・)イイよ
NGNG
バグバグだけどな
NGNG
作者ウザイ
NGNG
無名なのになぜかMiXの名がしばしば出てくるよね
NGNG
MiXでさえ機能多すぎでうぜぇ気がする。
単にパースしてくれれば済む話。
NGNG
キミはちょっと脳たりんだな。
NGNG
誰か、STLPortのデバッグモードでも落ちない小さなXMLパーサをつk(ry
NGNG
>>359
確かになんとかしてほしい。
取らぬ狸の皮算用とか言ってる場合じゃないぞ。
NGNG
hosyu
367デフォルトの名無しさん
垢版 |
NGNG
hs
NGNG
xerces-cのminGW用インポートライブラリ作ろうと思って挫折した。難しすぎ。
窓dllの仕組みもよう分からんのに移植しようとか思ったのが甘かったか・・・
NGNG
pexports/dlltoolで駄目だった?
370368
垢版 |
NGNG
名前マングリングされててどうにもならんす orz
pexportsで抜き出したdefの上4行はこんな惨状

LIBRARY xerces-c_2_6.dll
EXPORTS
??0ASCIIRangeFactory@xercesc_2_6@@QAE@XZ
??0AbstractDOMParser@xercesc_2_6@@IAE@QAVXMLValidator@1@QAVMemoryManager@1@QAVXMLGrammarPool@1@@Z
NGNG
ここのxerces-c-mingwは使えないだろうか?
http://sourceforge.net/project/showfiles.php?group_id=104669
372デフォルトの名無しさん
垢版 |
NGNG
てか、ソースからコンパイルすればいいじゃん。
NGNG
ん、たしかに。で、ソースからリコンパイルしてリンクまでいけた。
・・・が、SAXparserのコンストラクタでコケる。
これからデバッグモードでやりなおしてみるつもり。やれやれ・・・。
374デフォルトの名無しさん
垢版 |
NGNG
runConfigのオプションは? 
-p mingw-msys -n fileonly -r noneで行けた。
pスレにすると、MinGWのDLLがウザいので、pスレをやめると良いと思われ。
375デフォルトの名無しさん
垢版 |
NGNG
tinyXMLって名前のとおりtinyなのかな?
パースするだけならこれで良さそうなんだけれど。
376デフォルトの名無しさん
垢版 |
NGNG
パースするだけで、高速なのがよければexpatがお薦め!!
安定してるしね。CPPラッパーの、expatppも結構使える。
NGNG
>374
ビルドの最後でdoowrap.exeからc++.exeに渡すパラメータがおかしくてエラー出てたけど
手動でg++.exeに変更したらなんとかビルドできて正常動作しました。ありがとう。
378デフォルトの名無しさん
垢版 |
NGNG
Xerces C++ 2.6.0を使用しています。

for(;;) {
 elem = doc->createElement(tag_name);
 root->appendChild(elem);
 root->removeChild(elem);
 elem->release();
}

と書くと、メモリをがんがんに消費しまくるのですが、
何か足りない処理はありますか?
379デフォルトの名無しさん
垢版 |
NGNG
メモリ使用量が正常で無いというのは何と比較したのよ
380378
垢版 |
NGNG
>>379
えと、比較ではなくて、Windowsのタスクマネージャでメモリ消費量を眺めつつ
378を実行すると、メモリ消費量が単調増加していき、最終的にはメモリ不足で落ちる、
という感じです。
381378
垢版 |
NGNG
ついしんです。

for(;;) {
 elem = doc->createElement(tag_name);
 elem->release();
}

でも、起きました...
NGNG
Xercesのソースを少し追ってみました。

release()を行うと、Documentオブジェクトの再利用バッファにElementが退避されます。
退避されたオブジェクトは、次回に同型のオブジェクトを割り当てる際に、再利用されます。

確かにrelease()で解放したオブジェクトは、次回のcreateElement()の
呼び出しで再利用されているようです。しかし、Elementのデータメンバは
管理されておらず、コンストラクタでNULLが上書きされ、結果としてデータメンバは
メモリリークになります。

では手を加えてこのデータメンバを手動で解放しよう...と考えたいところですが、
オブジェクトの割り当てにはDocument独自のヒープ管理によりなされており、
このヒープ管理機能には、個々の割り当て結果を解放する機能がないように
見えます。(一括の解放はある)

恐らくフラグメントの処理等を省いて高速化を図っているんじゃないかと
思うんですが、このあたりの事情はどこかに書いてありますか?
(あるなら、お客さんには「そういうものなんだ」と言って逃げます)

FAQに再利用の件が少し書いてあるのを見つけましたが、リークが起きる事象
そのものの記述ではなく、いまいちな感じです。
NGNG
やっぱり素人にはJavaの方が楽だな.....

と思った。
NGNG
素人って俺のことな
385382
垢版 |
NGNG
そのまま納品しました。
ようやく年が越せそうだ...
386デフォルトの名無しさん
垢版 |
NGNG
玄人には?
387デフォルトの名無しさん
垢版 |
NGNG
XMLパースプログラムを自分で作るのは難しいのですか?
NGNG
簡単ですよ
ただ、仕様把握するのが面倒なだけで
難しいというか楽しい部分が少ないので誰もやりたがらない
05/01/18 18:48:03
XMLPlatformUtils::Terminate() 呼び出したら
cloneNode() とかで作成したオブジェクトも勝手に削除してる?
アプリの終了時に Terminate() 呼び出すから、
実行中に破棄できるオブジェクトを破棄し忘れてても気づかない・・・
05/01/27 12:12:29
・Xerces(SAX,DOM)
http://xml.apache.org/xerces-c/
マルチプラットホーム(win32,linux)
windowsの場合、xerces-c_2_6.dll(2,304KB)が必要。

・msxml()
http://www.microsoft.com/japan/msdn/xml/default.asp
MSXML4まで出てる。
MS独自の仕様があるっぽ

・expat/expatpp(SAX)
http://expat.sourceforge.net/
早いっぽい

・tinyXML()
http://sourceforge.net/projects/tinyxml/
小さいっぽい

・MiX()
http://mix.sourceforge.jp/
このスレに作者がいる予感


速度: expat > msxml = xerces = tinyXML = MiX
機能: xerces > msxml > expat = tinyXML = MiX
容量: msxml = expat = tinyXML = MiX > xerces
安定: xerces = expat = tinyXML > msxml > MiX
OS : xerces > msxml = expat = tinyXML = MiX

このスレを一通り読んで適当に書いてみた。
改変してー
05/01/27 12:19:24
誰も居ない予感
392デフォルトの名無しさん
垢版 |
05/01/27 12:21:40
何か目標でも立てれば?
2chパーサー作るとか
05/01/27 12:27:30
>>392
別に何か作ろうってスレじゃないと思われ
C++でXMLを使う事について ライブラリとかバグとかを話し合うスレと思われ
そしてネタ切れしてると思われ
とりあえず>>390改変でまとめようと思われ
wiki建てた方がいいのかな
05/01/27 12:42:24
個人的に思ったXML(parser)使う利点
・HTMLぐらい皆がわかる簡単な書式ってそうない。
・簡単なCSVでもパーザ書くのめんどくさいし。
・属性等に名称つけてるので可読性が高い。(CSVは、何行目が何ーとか覚えてないと駄目)
・解析後に独自のバイナリに落としときゃそれなり早いはず。
・ツリー状(親子関係)にデータをもてるので幅広く活用できる
・ゲーム系だとかなり使えるんじゃないの
3Dは、もちろん 基本的なアクションやシューティングって親子関係多いし。
別に親子関係無しでもいいと思う。

弾幕記述言語にXML使ってあり、
libBulletMLにtinyXML使ってるっぽい。
http://shinh.skr.jp/libbulletml/

05/01/27 16:57:29
食える文字コード
 Xerces: ICUと組んでとにかくいろいろ
 msxml: MSの各種コードページいろいろ(?)
 expat: UTF-8
 tinyXML: UTF-8
 MiX: std::basic_string<> (?)

※適当な調査です
05/01/27 18:24:28
tinyXMLのlibファイル
VC6,Releaseで118KBだった
小さい
05/01/27 23:04:33
expat: SAX
tinyXML: DOM
398Rubyist!
垢版 |
05/01/27 23:23:22
libxmlを忘れるなよ。
05/01/28 01:15:49
There are four built-in encodings in Expat:

 * UTF-8
 * UTF-16
 * ISO-8859-1
 * US-ASCII
05/01/28 10:07:33
>>398
それC++じゃないけど
05/01/28 10:08:11
>>396
Mixの方がそれより小さいんじゃないの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況