X



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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
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の方がそれより小さいんじゃないの?
05/01/28 10:10:17
>>390
一番重要なライセンスについて知りたいよう
05/01/28 12:44:32
expatもC++じゃないだろ
05/01/28 13:15:16
>>402
expatとlibxmlはMITライセンス。他は使わないので知らん。
05/01/28 14:37:45
tinyXMLは、zlib? ライセンス
05/01/28 15:15:56
MixとtinyXML容量比較しようと
適当にMiXの全ソース
VC6のstatic libプロジェクトにぶっこんでビルドしたけど
エラー出た。66個
おしまい。
template使いまくりで非常にC++らしく
SAX,DOM両方出来るらしいのは素敵なんだが。

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

ヘタレプログラマーには、導入しやすいかと。
05/01/28 15:20:50
>>403
C++版のexpatppってのがあるらしい

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


tinyXML遅いっぽ
ttp://www.radiumsoftware.com/0303.html#030308
05/01/28 15:23:49
Cだと
Parsifalってのもあるっぽいね

http://www.saunalahti.fi/~samiuus/toni/xmlproc/

速度はやっぱり
expatだが
409Rubyist!
垢版 |
05/01/28 17:47:33
libxmlはHTMLParserやシンプルなhttp/ftpクライアントとかXMLSchema/RelaxNG validationやlibxsltと連携できるのが利点かな?
windows上だとiconvやzlibもおまけで付いてくるので少し配布サイズがでかくなるが。
05/01/28 19:13:49
XMLって
<root att0="a", att1="b" />

じゃなく

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

って書かないと駄目なんですか?
Elements使えば解析できるが
05/01/28 19:23:39
>>410
テクニカルにはどっちもOK。
理念的には、というか普通はどっちも×。
05/01/28 20:11:27
xmlの理念について解説してるページ教えて
413デフォルトの名無しさん
垢版 |
05/01/28 21:15:44
理念など無いよ。
05/01/28 21:52:09
<root att0="a", att1="b" />
         ↑
05/01/28 22:01:56
見落としてた・・・・orz
05/01/29 02:58:17
XMLをバイナリーデータに落とし込む良い方法はありますか?

ttp://www-6.ibm.com/jp/developerworks/xml/040903/j_x-trans1.html
1つだけ情報見つけたけどなんかもっと分かりやすくて
C++で使えるツールとか無いかなぁと。
05/01/29 03:32:52
>>416
zipなりで圧縮すれば?
05/01/29 12:11:34
1バイトずつ読み込んで全ての最上位ビットを1にすればよろし。
05/01/29 16:09:30
壊れちゃうよ
05/01/29 16:25:41
>>410-411は結局どう書けば普通なの?
05/01/29 21:28:01
>>419
ごめん。そうだね。

1バイトずつ読み込んで全ての最上位ビットを反転すればよろし。

に訂正。
05/01/30 01:00:02
>>420
気分次第
05/01/30 02:21:42
>XML Binary Infoset (XBIS)プロジェクト

↑これ使った人いる?

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

って事らしいが。
05/01/31 09:44:26
読みやすきゃ形式どうでもいいんじゃない?
不安ならHTML真似すれば
05/02/01 09:01:41
SOX(Simple Outline XML)流行らないね
05/02/01 18:59:57
C++でXML書かせたいんですけどいいライブラリないですか?
05/02/01 19:50:34
擦れたい嫁
428デフォルトの名無しさん
垢版 |
NGNG
>>427
得ろ杉
05/02/01 21:35:51
WinだったらMSXML以外を選択するメリットが分らないんだけど。
XercesとMSXMLの違いを教えてぽ。
430429
垢版 |
05/02/01 21:52:22
MSXMLってXPathもXSLTも(1.0だけど)XMLSchemeも実装していて、まじ便利じゃん。
独自拡張って言っても、細かい制御なり設定/取得できていい感じじゃん。
XSLTでもJavaScriptを拡張言語指定できて便利じゃん。(早く2.0を実装しろと)
パフォーマンスも外部参照やValidation組んでいる割にはかなり早いし、軽いじゃん。

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

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

そういったシェア拡大の為の宣伝は下手だな<relaxng
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>
05/02/03 01:38:23
>>435 http://www.azureus.com/xml/art_prettyprinting_xml.htm

何か大変だな。
437435
垢版 |
05/02/03 02:10:32
ぐ、ぐぅ分からん。
段差をつけるには単純に空白を追加しろって書いてあるような気ガス

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

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

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

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

時間が空いたらSAXやってみるかな
05/02/10 19:21:30
XSLTなら
<xsl:output method="xml" />
<xsl:output indent="yes" />
で済むからめっちゃ楽だよね。
05/03/09 20:49:38
MiXバグだらけ、という話だけど
XMLファイルの読み込み程度なら耐えられるのかな?

それともそれすらままならない?
05/03/09 21:38:35
>443
>339,342,343-346
ここらへんの話だね。
しょうじきSTLの扱いが怪しいところが何箇所かあった。
内部処理にexpatを使ってくれるようになったらいくらか…、
って、expatラッパーならほかにあるしなぁ……。
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"

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
447345
垢版 |
2005/06/07(火) 15:22:34
>>444
結局、時間がなかったのであの時はMiX使ったけど、
次の機会には絶対別のパーサを使おうと決めました。

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

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

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

1.アプリ製作元が確認したビルド環境に合わせる
2.ソースを改変してコンパイルが通る様にする
3.バイナリ版を使う
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文書が出力されます。それをタブにする方法はありませんか?
453デフォルトの名無しさん
垢版 |
2005/07/16(土) 02:50:36
age
454デフォルトの名無しさん
垢版 |
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形式のデータなどどこにも見当たらない。

なお、お察しのとおり、財団法人 気象業務支援センターも
財団法人 日本気象協会も 気象庁の官僚の天下り先である。
2005/08/01(月) 20:11:10
官僚って毎日終電過ぎてタクシーで帰るらしいね。
2005/08/21(日) 13:12:18
仕事が忙しいんだね。大変だ。
2005/08/25(木) 23:19:59
タクシーで帰れるなんてなんて贅沢なんだと思ってしまったw
2005/09/04(日) 13:27:06
仕事で忙しいか。
接待したり、飲み会したり、勉強会と称して雑談したり、
有り余るゼニの使い道を考えたり
ゴルフの練習をしたり

大忙し
459デフォルトの名無しさん
垢版 |
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ディレクトリとかは問題なくコンパイルとおっている
んだけど、なんでですか?
460459
垢版 |
2005/09/12(月) 23:20:35
あれ、cygwinにxerces ついてるじゃん。
こっちつかえばいいや。失礼しました。
461デフォルトの名無しさん
垢版 |
2005/09/13(火) 03:32:00
xercesってなんですか?発音も教えて
2005/09/13(火) 04:18:34
ザーシーズ。

紀元前5世紀前半、アケメネス朝ペルシャの王位についていたクセルクセス(Khshaiarsha)王の
名がギリシア語経由で欧米に伝ったもの。ドイツ語や、英語ではXerxesと書く。
のち、フランスの昆虫学者が、サンフランシスコ半島に生息していた絶滅種の蝶に、この大王の
名を付けた。このクセルクセスのフランス語形Xerces、蝶の名が、XMLパーサxercesの元ネタ。
2005/09/13(火) 04:25:30
>>462
本当なんだかネタなんだかよくわからん情報をありがとう。
2005/09/13(火) 04:32:09
本当だ、ばかもの。
2005/09/13(火) 19:16:52
バカとは何だ、バカとは!
2005/09/13(火) 19:22:37
そうだこのうつけが!
2005/10/07(金) 00:54:31
Xercesやexpatの存在を最近知って
とりあえずイジってみたいというレベルの人向けの
入門的サイトってありますか?できれば日本語で。
2005/10/12(水) 21:49:16
大人しく本買うかライブラリ付属の説明を頑張って読むほうが良さげ
2005/10/12(水) 21:55:42
本あったっけ
2005/10/12(水) 21:58:18
俺は↓の読んだけど意見分かれるかもね

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

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

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

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

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