X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
NGNG
スレ無いしサイト少ないので立ててみる
いらなかったらサゲまくってください
0380378
垢版 |
NGNG
>>379
えと、比較ではなくて、Windowsのタスクマネージャでメモリ消費量を眺めつつ
378を実行すると、メモリ消費量が単調増加していき、最終的にはメモリ不足で落ちる、
という感じです。
0381378
垢版 |
NGNG
ついしんです。

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

でも、起きました...
0382デフォルトの名無しさん
垢版 |
NGNG
Xercesのソースを少し追ってみました。

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

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

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

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

FAQに再利用の件が少し書いてあるのを見つけましたが、リークが起きる事象
そのものの記述ではなく、いまいちな感じです。
0385382
垢版 |
NGNG
そのまま納品しました。
ようやく年が越せそうだ...
0386デフォルトの名無しさん
垢版 |
NGNG
玄人には?
0387デフォルトの名無しさん
垢版 |
NGNG
XMLパースプログラムを自分で作るのは難しいのですか?
0388デフォルトの名無しさん
垢版 |
NGNG
簡単ですよ
ただ、仕様把握するのが面倒なだけで
難しいというか楽しい部分が少ないので誰もやりたがらない
0389デフォルトの名無しさん
垢版 |
05/01/18 18:48:03
XMLPlatformUtils::Terminate() 呼び出したら
cloneNode() とかで作成したオブジェクトも勝手に削除してる?
アプリの終了時に Terminate() 呼び出すから、
実行中に破棄できるオブジェクトを破棄し忘れてても気づかない・・・
0390デフォルトの名無しさん
垢版 |
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

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

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

0395デフォルトの名無しさん
垢版 |
05/01/27 16:57:29
食える文字コード
 Xerces: ICUと組んでとにかくいろいろ
 msxml: MSの各種コードページいろいろ(?)
 expat: UTF-8
 tinyXML: UTF-8
 MiX: std::basic_string<> (?)

※適当な調査です
0398Rubyist!
垢版 |
05/01/27 23:23:22
libxmlを忘れるなよ。
0406デフォルトの名無しさん
垢版 |
05/01/28 15:15:56
MixとtinyXML容量比較しようと
適当にMiXの全ソース
VC6のstatic libプロジェクトにぶっこんでビルドしたけど
エラー出た。66個
おしまい。
template使いまくりで非常にC++らしく
SAX,DOM両方出来るらしいのは素敵なんだが。

tinyXMLは、
DOMしか出来ないっぽいが、
VC6のlib生成用のプロジェクト最初からついてて
template使わない単純なクラスばっかり。

ヘタレプログラマーには、導入しやすいかと。
0407デフォルトの名無しさん
垢版 |
05/01/28 15:20:50
>>403
C++版のexpatppってのがあるらしい

libxmlはCだね。
まあC++でも使えるからいいんじゃね?


tinyXML遅いっぽ
ttp://www.radiumsoftware.com/0303.html#030308
0409Rubyist!
垢版 |
05/01/28 17:47:33
libxmlはHTMLParserやシンプルなhttp/ftpクライアントとかXMLSchema/RelaxNG validationやlibxsltと連携できるのが利点かな?
windows上だとiconvやzlibもおまけで付いてくるので少し配布サイズがでかくなるが。
0410デフォルトの名無しさん
垢版 |
05/01/28 19:13:49
XMLって
<root att0="a", att1="b" />

じゃなく

<root>
<att0>a</att0>
<att1>b</att1>
</root>

って書かないと駄目なんですか?
Elements使えば解析できるが
0413デフォルトの名無しさん
垢版 |
05/01/28 21:15:44
理念など無いよ。
0416デフォルトの名無しさん
垢版 |
05/01/29 02:58:17
XMLをバイナリーデータに落とし込む良い方法はありますか?

ttp://www-6.ibm.com/jp/developerworks/xml/040903/j_x-trans1.html
1つだけ情報見つけたけどなんかもっと分かりやすくて
C++で使えるツールとか無いかなぁと。
0423デフォルトの名無しさん
垢版 |
05/01/30 02:21:42
>XML Binary Infoset (XBIS)プロジェクト

↑これ使った人いる?

>プレーンテキストの XML と XBIS エンコーディングした XML と
>gzip 圧縮した XML に対するテスト結果によると、
>XBIS を使えば処理時間と文書サイズ両方が小さくできるのに対し、
>gzip 圧縮を用いれば文書サイズが大幅に小さくできる代わりに処理時間が
>増えるということです。

って事らしいが。
0428デフォルトの名無しさん
垢版 |
NGNG
>>427
得ろ杉
0429デフォルトの名無しさん
垢版 |
05/02/01 21:35:51
WinだったらMSXML以外を選択するメリットが分らないんだけど。
XercesとMSXMLの違いを教えてぽ。
0430429
垢版 |
05/02/01 21:52:22
MSXMLってXPathもXSLTも(1.0だけど)XMLSchemeも実装していて、まじ便利じゃん。
独自拡張って言っても、細かい制御なり設定/取得できていい感じじゃん。
XSLTでもJavaScriptを拡張言語指定できて便利じゃん。(早く2.0を実装しろと)
パフォーマンスも外部参照やValidation組んでいる割にはかなり早いし、軽いじゃん。

くだらない::CoInitialize(VOID)書かなきゃいかんのは、デメリットかな?
スマートポインタと相性悪いんだYO!
個人的にはRELAXを実装して欲しいところ。
0432429
垢版 |
05/02/01 22:03:55
>>431
具体的にどうありえねーのか教えてくれろ?
ついでにXercesの素晴らしさも教えて欲しいです。

いまXerces-C++使うプログラム書いてんだけどよ、なんか馴染まないんだぁよ。
0433デフォルトの名無しさん
垢版 |
05/02/01 22:07:09
msxmlでrelaxngの実装されることなんてありえね、と言っているのではないかな。431じゃないがたぶん。
0434429
垢版 |
05/02/01 22:26:25
>>433
ありえて欲しいところw
VCのAdd-Inで組んで広めれば、簡単に広がりそうなもんだが。

そういったシェア拡大の為の宣伝は下手だな<relaxng
0435デフォルトの名無しさん
垢版 |
05/02/03 01:22:12
誘導されてきました。

知ってる人いたら教えてけろ

407 名前:デフォルトの名無しさん 投稿日:2005/02/02(水) 23:26
COMはありですか?

VC6 でMSXML使ってます。

XML形式の書き出しは何とかできたんだけど、出力が1行になっちゃいます。
複数行に出力されるようなフラグとかあるんですか?

現状
<?xml 略?>
<root><a><b>text</b></a></root>

理想
<?xml 略?>
<root>
タブ1個<a>
タブ2個<b>text</b>
タブ1個</a>
</root>
0437435
垢版 |
05/02/03 02:10:32
ぐ、ぐぅ分からん。
段差をつけるには単純に空白を追加しろって書いてあるような気ガス

もしくは VCでやるには XSLT 使わないとダメってことかなぁ
0439429
垢版 |
05/02/03 19:11:28
>>435
DOMいじって再帰で階差をつけるよりは>>436のサイトのXSLTを読み込んで
変換かけたほうがパフォーマンス的に良い場合が多いし、楽。(データ量が多いほどXSLT使った方が早い)
もともとXML的にはトリミング無い方が正しい(?自信無し)訳だし、確認だけなら>>438の言う通り
IEで見ればいいと思う。

それ以外だと、UTF-8が素で読み込めないという欠点はあるが、Pythonの標準DOMにprettyXML関数がある。
俺はそれを使って、データの確認をしている。
0440429
垢版 |
05/02/03 19:15:23
>>435
ちなみにDOM使って再帰で階差をつけるのはそんなに簡単じゃない。
>>436のサイトではSAX使っている例があるが、SAXならクソ簡単。

>>439
誤 トリミング
正 インデント
0441435
垢版 |
05/02/03 21:17:00
みんな色々さんく。

とりあえず今回は時間もないんでDOMのままでいっとく

時間が空いたらSAXやってみるかな
0443デフォルトの名無しさん
垢版 |
05/03/09 20:49:38
MiXバグだらけ、という話だけど
XMLファイルの読み込み程度なら耐えられるのかな?

それともそれすらままならない?
0444デフォルトの名無しさん
垢版 |
05/03/09 21:38:35
>443
>339,342,343-346
ここらへんの話だね。
しょうじきSTLの扱いが怪しいところが何箇所かあった。
内部処理にexpatを使ってくれるようになったらいくらか…、
って、expatラッパーならほかにあるしなぁ……。
0445デフォルトの名無しさん
垢版 |
2005/05/10(火) 23:44:35
<xml>
<text prop="a">AAAA</text>
<text prop="b">BBBB</text>
</xml>

XPathで2番目のノードを指定する場合って
/xml/text[2] なんだけど、
これ以外にプロパティで選択する方法ってある?

ニュアンスはこんな感じ。
/xml/text:prop="b"

0446デフォルトの名無しさん
垢版 |
2005/05/11(水) 01:26:12
>445
XPathには詳しくないが、ググったら一発で見つかったんで答えてみるテスト。
 /xml/text[@prop="b"]
または
 /xml/text[attribute::prop="b"]

ttp://www.doraneko.org/xml/xpath10/19991116/Overview.html#location-paths
0447345
垢版 |
2005/06/07(火) 15:22:34
>>444
結局、時間がなかったのであの時はMiX使ったけど、
次の機会には絶対別のパーサを使おうと決めました。

正直お勧めはしません。
0448デフォルトの名無しさん
垢版 |
2005/07/14(木) 17:24:57
>>206でも話題にあがってるけど、レスした人がいないようなんで。
XMLのパスに全角文字が含まれていると正しく実行されない。
(DLL内で永久ループにはまる?)
回避法ないですか?
0449デフォルトの名無しさん
垢版 |
2005/07/14(木) 17:34:34
すまん。DLL内で永久ループ〜ってのは俺のプログラムがあほなせいだった。
m_pParser->parseURI(lpszFileName);

ここでNULLが返ってくるだけだな。
ためしにMSLCh* に変換しても×だった
0450デフォルトの名無しさん
垢版 |
2005/07/15(金) 00:24:56
#include <Windows.h>

↑Xercesでこれやったら、コンパイルエラーになるんだけど、どうして?
0451デフォルトの名無しさん
垢版 |
2005/07/15(金) 07:59:05
Windows + VisualC++2003 + STLPortで
コンパイルが通らない。
STLPortが駄目なんですかね?
UNIXユーザーはアプリケーションはソースから
コンパイルして使うのが一般的と聞いたんだけど
こういう場合どういった対処をするもんなんですか?

1.アプリ製作元が確認したビルド環境に合わせる
2.ソースを改変してコンパイルが通る様にする
3.バイナリ版を使う
0452デフォルトの名無しさん
垢版 |
2005/07/16(土) 02:50:03
Xercesで

DOMWriter *pxWriter = static_cast<DOMImplementationLS*>(pxImpl)->createDOMWriter();
pxWriter->setEncoding( _UNICODE("Shift_JIS") );
pxWriter->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
LocalFileFormatTarget target( _UNICODE("tekitou.xml") );
pxWriter->writeNode(&target, *pxDoc);

ってやると、勝手に空白二つのインデントが入ったXML文書が出力されます。それをタブにする方法はありませんか?
0453デフォルトの名無しさん
垢版 |
2005/07/16(土) 02:50:36
age
0454デフォルトの名無しさん
垢版 |
2005/07/26(火) 19:17:47
http://neta.ywcafe.net/000339.html

天気予報をXMLで提供すると気象庁が発表してから半年が経った
実は2004年の11月には既に気象庁がこんなプレスリリースを出している。
府県天気予報・府県週間天気予報を新しい形式(XML形式)で提供します。

◎:平成16年12月から追加して発表するもの
(XML形式で提供します。気象庁HPでも12月から掲載します。)

しかし発表で予告された12月1日からもう半年以上を経た2005年7月現在、
気象庁のwebサイトにはXML形式のデータなどどこにも見当たらない。

なお、お察しのとおり、財団法人 気象業務支援センターも
財団法人 日本気象協会も 気象庁の官僚の天下り先である。
0458デフォルトの名無しさん
垢版 |
2005/09/04(日) 13:27:06
仕事で忙しいか。
接待したり、飲み会したり、勉強会と称して雑談したり、
有り余るゼニの使い道を考えたり
ゴルフの練習をしたり

大忙し
0459デフォルトの名無しさん
垢版 |
2005/09/12(月) 22:43:37
ビルドできないんだけど・・・・

XERCESCROOT=c:/usr/xerces-c-src_2_7_0/src/xercesc

>runConfigure -pcygwin -cgcc -xg++
>make

すっと、

AbstractDOMParser.cpp が、dom/impl/DOMAttrImpl.hpp が見つからないっつってとまる。
そのファイルちゃんとあるし、frameworkディレクトリとかは問題なくコンパイルとおっている
んだけど、なんでですか?
0460459
垢版 |
2005/09/12(月) 23:20:35
あれ、cygwinにxerces ついてるじゃん。
こっちつかえばいいや。失礼しました。
0461デフォルトの名無しさん
垢版 |
2005/09/13(火) 03:32:00
xercesってなんですか?発音も教えて
0462デフォルトの名無しさん
垢版 |
2005/09/13(火) 04:18:34
ザーシーズ。

紀元前5世紀前半、アケメネス朝ペルシャの王位についていたクセルクセス(Khshaiarsha)王の
名がギリシア語経由で欧米に伝ったもの。ドイツ語や、英語ではXerxesと書く。
のち、フランスの昆虫学者が、サンフランシスコ半島に生息していた絶滅種の蝶に、この大王の
名を付けた。このクセルクセスのフランス語形Xerces、蝶の名が、XMLパーサxercesの元ネタ。
0467デフォルトの名無しさん
垢版 |
2005/10/07(金) 00:54:31
Xercesやexpatの存在を最近知って
とりあえずイジってみたいというレベルの人向けの
入門的サイトってありますか?できれば日本語で。
0470デフォルトの名無しさん
垢版 |
2005/10/12(水) 21:58:18
俺は↓の読んだけど意見分かれるかもね

C++によるXML開発技法
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714140/250-1021717-6488243
0472デフォルトの名無しさん
垢版 |
2005/10/20(木) 01:46:55
xerces とか libxml って、そのままだとかなりでかいライブラリなんだが、
サブセットで xxx.dll サイズ小さくしたやつってない?
0474デフォルトの名無しさん
垢版 |
2005/10/20(木) 02:41:45
>>472
おま、dll って、windows 限定でいいんなら始めから素直に msxml 使っとけよw

インストールされているバージョンに若干気をつける必要があるが、
最近の windows なら標準で添付されてんだから dll の大きさなんか気にする必要なし。
( 最近の windows じゃなくても最近の IE が入ってればおk )
0476472
垢版 |
2005/10/21(金) 00:02:41
ゴメソ
別にwindows限定な話じゃないつもりだったんだけど、dll っていっちゃって失敗したw
いや、フリーでソースも公開されてるので、linuxでもwindowsでも使えて、サブセットを
選べて、場面に応じてコンパクトなライブラリとしてビルドできたらいいななんて思ったんです。

>>473
知りませんでした。ちょっと調べてみまつ Thx!!

ただ、本当は xerces の config オプションとかでサブセットでライブラリを作るかフルセット
で作るかをビルド時に選択できたりするとうれしいかなと。
0477デフォルトの名無しさん
垢版 |
2005/10/21(金) 14:06:32
小さめのライブラリがいいんならもともと小さいのを使っておればいいだろ
expatとかさ
まあDOMもXPATHも使えんがw
0478デフォルトの名無しさん
垢版 |
2005/10/22(土) 01:05:24
小さいサイズのライブラリを使うためにライブラリの種類を変えないと
いけない(使い方も微妙にかわる)ってのが嫌なんだろう
0479デフォルトの名無しさん
垢版 |
2005/10/23(日) 00:01:29
XMLを使うったって、
ちょっとプログラム上でApacheやRealServerのconfを
書き換えたいという程度の時もあるんだな。
夜中にトップページを「また明日」に自動的に変更するとかさ。
そういうちょっとした作業にはMiXでさえうざいぐらい大きい。
■ このスレッドは過去ログ倉庫に格納されています

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