C++でXML(主にxerces)やろう!
■ このスレッドは過去ログ倉庫に格納されています
スレ無いしサイト少ないので立ててみる
いらなかったらサゲまくってください だよな。使う道具を間違えてるのに道具のせいにしてるとしか思えん。 いや、だから自作してるって。メジャーなのは大きすぎるから。
あと、単独では動かず、Perl本体をインストールしないといけないPerlは問題外。 もしかしてサーバはWindowsか。なんかもう・・・いいや。 全台UNIXというわけにもいかない。
ハードや商用ソフトの知的所有権の制約もあるんだよ。 WindowsならWSHからMSXML使用でいいのでは。 だからそういう外部モジュールと依存関係とりたくねーの。
スタティックリンクしてなるべく自己完結したいの。 同意は486に対してね。
つかもういいよ。その例はXMLの話にもっていくほどでもない。 自分が必要な機能だけをサポートした、小さなライブラリ作れば済むだけの話じゃん。
汎用のライブラリが小さく作れるわけ無かろう。
バカを相手するのも大変だな、まったく。 小さいライブラリの実装とか話題にしたくないわけね? 「小さいライブラリ無い?」ってただのクレクレ厨じゃん。 その場合の大きい小さいって何だ?
ファイルサイズか?それともいらない関数が多いとかか? じゃあスレ違いだね。
君専用の汎用ライブラリなんて存在し無いから。 「お前が欲しい機能だけ実装されたライブラリ」の話だったらまったく興味は無いな。 やっぱXMLの話にもっていくほどじゃないな。
>>494が欲しいのはconfの特定の部分を書き換えるライブラリじゃん。 だからトップダウンでパースするかイベントでとるかとか
字句解析時の内部コードはどうするかとか
そういう話にはもって行きたくないのね? msxmlの使い方がわかんなくて駄々こねてるだけと見た。 いらない機能は使わなければいいだけだと思うのだが。 >>498
いつのまにライブラリ無いか?の話からライブラリ作らないか?の話に変わったんだ 話が錯綜してるけど482は自作しているのだが。
もう一人は小さいのが無いのか探している。 staticリンクなら、もともと「使ってない機能に関する」オブジェクトは
リンクされないんじゃないか?
>>498
おまえ素人か。
仮に作りたいなら要件を詰めろよ。
どんな機能が必要か決めないとそんな話にもっていけるわけねーだろ。 文字エンコード対応だけで結局デカくならん?
Windowsには標準ではiconvも(もちろんICUも)ないよ?
まあデカいからICUなんてこの場合まず選択肢に入らないだろうけど >>502
自作してるのはXMLパーサじゃないんだろ?
>>503
規模が大きいということはずーっとバグ取りやセキリティfixの
バージョンアップがずーっと続くということもあるし。 >>505
UTF-8の場合、外部の正規表現ライブラリの制約とかが無い限り
ASCII記号とマルチバイトが被らないという特徴を生かすという方向もある。
>>506
オレのはトップダウンパーサ。 >>508
汎用のパーサに大きすぎるって不満があるから
必要な都度作ってるって話だな。 >>510
それは暗にUTF-8限定、と言っとるわけだな。
俺的にはその時点でかなりやなかんじ。 ttp://www.40hz.org/tox/
これはまじで小さいよ。パーサといえるかどうかは微妙だが
インタフェースはSAX風のイベントハンドラ式。
これをちょっといじったのを使ったことはある。
ていうか「正規のXML文書であっても読めるとは限らない」ライブラリ、だよね
いらないよそんなの。 >>510
いや、parseの方法なんか聞いて無いんだ。
任意のXMLを確実に扱えるのか? 配布まで考えるとオレ様ライブラリの方がいいかもね。
ほげほげXMLのバージョンいくつをインストールして
あれもこれもダウンロードしてOSはサービスパックいくつ以上とかうるさくなるから、
なるべくひとつの実行ファイル単体で動作するもののほうがうれしい。
オレ様系と汎用の境目がわからん。
TinyXmlとかMixあたりだとどっちになるんだ? MiX凍結して結構経つなぁ
個人的にTinyやexpatよりもMiXが一番ニーズに合うから期待はしてたんだけど
もうだめぽ…? 小規模ソフトですぐに枯れたんならむしろ旬だが。
逆に永遠にバグフィックスが続くのが大規模ソフトのイタイ点。 LISPで"我慢"か
勧めてるのか、けなしてるのか MiX、サンプルの
MiX::DOM_Parser<char> parser;
parser.setIgnoreSpace(true);
return parser.parse(fin);
がコンパイル通らなくてどうしようもないんだが。。。
document_typeとMiX::document<char>が合わない?? WebサービスもXMLもVBならカンタンだね。
WebアプリケーションもWindowsアプリと同じだし、
そもそもXMLって何だっけ?
MiXが使えないと嘆いてた者です
ちょっとしたXMLを読み書きしたいだけなら
SourceForgeにある、Froggerがよさげでした
機能、サイズともにMiXより小さくて(ヘッダとソースで1000行以下)
DOMでの読み書きができて、SAXは使えません
他、細かい事はできない感じですが、用途によっては十分だと思いました
参考になればと思い書き残しておきます IXMLDOMNodeのnodeTypedValueプロパティがSystem.Xml.XMLNodeには
存在しないんだけど、C++でput_nodeTypedValue()でシリアライズした
VARIANTは、どうやればC#で読み出せるんだ。
いろいろ調べたけど、どうも無理ぽなんだが。
(Interop.MSXML2.dllを作れば別だけど)
S式パーサがあればXMLなんて不要。
どうしようもなく冗長なXMLを使ってる馬鹿は考えを改めた方がいい。
http://pc8.2ch.net/test/read.cgi/tech/1140006937/
機能的にはむしろS式の方が優れているのだが、
XMLである必要ってのは結局ミドルウェアや市販のツールの都合だろうな。 それよりもHTML(そしてSGML)らしさを醸し出してカモを集めようとしただけだと思う。 MiX使ってみたんだけどこれなんで引数の受け渡しが参照じゃないの?
理由がサッパリわからんのだけど
もしかしてこれは俺の知らないワンダフルな最適化方法なのかい? 生の XML ではなくて、RDF (RSS/RDFに限らず)を
いじくるための標準的なライブラリは何でしょうか?
Mozilla のソースなどから取り出して使えないかと
検討したことがあるんですが、単独で使うには
適していないみたいです。 >>538
MiXは腐ってるし作者も投げたみたいだから使わない方がいいよ。 >>541
やっぱりか……
MiXソース眺めてみたけどそんな気がしたのでXercesに乗り換えた。
レスdクス XML Schema Language でかかれたスキーマから、
C++ のクラスを生成してくれるようなライブラリはありますか?
できればシリアライザも・・・
Java や .NET Framework ではあるのですが、
C++ で読み書きしたいっす。 >>546
Simple Expression Xml? >>540
http://librdf.org/
C++っていうかCだけど。
あとrepatっていうexpatベースのRDFパーサがあったんだけど配布元が消えた。 xercesのC++版で、SAXをつかって、ファイルに書き出すクラスってあります?
MSXMLやxercesのJava版ではあったんですが。
とりあえず実装して使ってますが、元々あるなら切り替えたいなぁと。 Java版にあってC++版にない事もなかろう。つーか、ドキュメントないの? Documentというか、Java版のクラス名と同名、一部でソース検索掛けたり、
ぐぐったりしてみましたが、見つからず。
100MくらいのXMLをIEで開いたらフリーズした フリーズではなく、思いっきり時間かかっているだけってことないか?
#100Mもあったら無茶苦茶リソース食いそうだが。 XMLはDOMで開くと開くXMLのサイズの10倍はメモリ喰うと考えていいな。 MSXML最高
IE6入ってればMSXML3使えるし libxml2をわかりやすく解説してるサイトある? C++ というか、.NET の話な気がするけど、
XPath などで、1部分だけXMLノードを抜き出して、
それを Read() で回して各ノードの情報を取りたいんだけど、
どの reader に代入すれば良いのか分からない……どうしらた良いですか? dom使ったらすんげー遅かった
saxってどうなんすか?
っていうかセンス無いライブラリだと思った
libxmlでも試すか… Javaみたいにインタフェースベースで作ればいいのに。
MSXMLだろうがXercesだろうが、
それぞれのファクトリだけ変更すれば全部同じになるじゃん MSXMLは元からインターフェースベースですよ。
……すまん、言ってみたかっただけだ。 xmlファイルのdiffツールでいいものないかな?
単純なdiffだと、line単位で差分を検出してしまうので
無視していいものまで出てきてしまいます
xpath形式に変換してdiffとかすればできるかな? UTF-8のxmlをXMLString::transcodeでShift-JISに変換すると下記の様に、"〜"や"−"が"?"となってしまうのは解決できませんか?
「お〜い。−100」 → 「お?い。?100」 となってしまいます。
BCC5.5、Xerces-C++ Version 2.7.0 を使ってます。 >>567
Shift-JIS と CP932 (MS-Windows-31J, MS932) の違いを覚えるといいと思うよ. >>568さん
ありがとうございます。
ttp://www.ingrid.org/java/i18n/encoding/shift_jis.html
を参考に何となく分かりました。
結局解決は無理なのでしょうか…?
Xercesのソースをいじったり、transcodeで使う変換テーブルの様なものがあって、それをいじれば可能とか?
解決方法をネットで探しているのですが、一向に見つからなかったので質問させて頂いた次第です… >>570さん
ありがとうございます。
実は私、Cの経験は多少あるのですが、C++やXML、またWindows上でのソフト開発に関してはさっぱりのド素人です。
今回は、あるフリーソフトの公開されているソースを、少しだけ自分で必要な機能に特化して改造しようとしていている最中です。
とりあえず何とか環境を揃えて、ソースをビルドできるまでにはなりました(^^;
ICUというのも知りませんでしたが、少し調べてみて、これを文字変換に使えばできるのかな?という感じなのでもう少し調べてみます。
分からなかった場合、また質問させて頂くと思うので、よろしくお願いします。 今時XPathも使わずにDOMを真面目にたどって要素を取得なんて考えられんが
Xerces, Xalan両方入れるとなるとデカ杉っつー感じよなぁ >>567-568
バベルでその問題に対応する為にそのへんの差分をいろいろ調べたけど、
取りあえず Xeerces に読み込ませる前に予め以下の変換を施せば十分だと思う。
0x2014 → 0x2015 // HORIZONTAL BAR
0x301C → 0xFF5E // FULLWIDTH TILDE
0x2016 → 0x2225 // PARALLEL TO
0x2212 → 0xFF0D // FULLWIDTH HYPHEN-MINUS
0x00A2 → 0xFFE0 // FULLWIDTH CENT SIGN
0x00A3 → 0xFFE1 // FULLWIDTH POUND SIGN
0x00AC → 0xFFE2 // FULLWIDTH NOT SIGN
あと、Mac 上で作成された UNICODE 文字列には結構
PRIVATE USE AREA ( 0xE000 〜 0xF8FF )のコードが含まれるんで
必要に応じてこのへんのコードも読み飛ばせばおk >>567-571,573
ICUとやらををどうにか組み込んだりしてみましたが、ダメでした。
私のレベルでは無理みたいなので、あきらめます…
どなたかWindowsXP、BCC 5.5.1、Xerces-C++ 2.7.0の環境で
>>567が問題無くできているよという識者の方がいらっしゃいましたら、初心者向けに具体的対策を御教授願います。m(_ _)m >>574
>>573 の解決策を施すのが無理って言われたら、
こっちもお前さんに教えるのは無理っす、勘弁してください。 >>575さん
表の値がよくわかりませんでした…
例えば "〜" のUTF-8コードって 0xEFBD9E、Shift-JISは 0x8160ですよね。
でも XMLString::transcode に渡すのは const XMLCh* 型みたいなので、unsigned shortのワイド文字型のポインタになってますよね。
ということは、XMLString::transcode に渡す前にどこかで UTF-8→XMLCh型の変換 が行われているという事ですか?
つまり "〜" 0xEFBD9E(UTF-8)→<どこかで変換>→0x????(XMLCh型)→<XMLString::transcodeで変換>→0x8160(S-JIS) ということ?
見当違いでしたらすみません。
>>575さんは対策可能なのでしょうね…。ひょっとしたら確認も取れているのでしょうか。すばらしいです。
私の知識レベルでは無理そうです(T_T) ひっかかったのはそこか。
>>573 の変換表の値は UTF32 の時の値。
>でも XMLString::transcode に渡すのは const XMLCh* 型みたいなので、
>unsigned shortのワイド文字型のポインタになってますよね。
>ということは、XMLString::transcode に渡す前にどこかで UTF-8→XMLCh型
>の変換 が行われているという事ですか?
>つまり "〜" 0xEFBD9E(UTF-8)→<どこかで変換>→0x????(XMLCh型)→
><XMLString::transcodeで変換>→0x8160(S-JIS) ということ?
xerces を触ったことはないけど、恐らくそうだろうね。
const XMLCh * な文字列に格納された時点で UTF32 に変換されていれば、
>>573 の変換を<XMLString::transcodeで変換>の直前に適用するだけで多分、おk >>567です。
読み込むオリジナルのXMLはUTF-8だったのですが、これを一旦Shift-JISに変換してからxercesを通す事で、XMLString::transcode周りをいじらずに、とりあえず求める結果を得ることが出来ました。
("〜"はまだですが、"−"は表示確認済み)
レスをして下さった皆様ありがとうございました。m(_ _)m linux & C++ & libxml2 で設定ファイル読み書きさせたいんだけど全然資料ねーや
日本語の資料なんかないですか? ■ このスレッドは過去ログ倉庫に格納されています