Xercesを使う機会があったのでブログからサンプルソースなどを使用して
動作を確認してみました。
DOMノードを使用した解析なども未経験だったため良い経験になりました。
Xercesを使用しXMLを読み込ませた場合、改行がひとつの要素として扱われていました。
自身の都合上改行を要素として扱ってほしくはないのですが、
オブジェクトの設定値を変更するだけで要素として扱わない様な仕様があれば良かったのですが、無さそうでした。
ということでどうやって回避するかですが、方法は単純で
タグを一つの要素として見なす場合、タグにはタグ名が設定されています。
改行のみの場合はタグのように山かっこで囲まれておらず、タグ名は
設定されていません。
なので、改行についてはタグ名を取得した際にタグ名が取得できなかったら
改行のみの要素として判断します。
以下にサンプルのソースを記載しました。
char* name = XMLString::transcode(((DOMElement*)text)->getTagName());
XMLString::trim(name);
if (strlen(name) < 1) {
cout << "改行文字の要素です!"<< endl;
}
XMLString::release(&name);
色々省略はしていますが、「getTagName」戻り値は改行文字を含んだ文字列が返ってきます。その戻り値から「trim」を使用して改行文字を除外することで改行文字以外の文字が残る仕組みになっています。
あとは空かどうかを判定するだけです。
少しでもXercesを使う方の労力を減らせればと思います。
読んでいただきありがとうございました。