7

UPDここで「フォーマット」の問題に対する回答を見つけたので、質問のこの部分を削除します。更新された質問を読んでください:

C ++のファイルシステムにxmlを書き込む必要があります。私はこの格言を学びました。チュートリアルでは、非常に単純な xml が使用されています。私の xml はより複雑で、コードを変更して生成する方法がわかりません。それが私がコードしたものです:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

//<Root>
//  <Set Name="1">
//      <Field Name="Hello 1"/>
//      <Field Name="World 1"/>
//  </Set>
//  <Set Name="2">
//      <Field Name="Hello 2"/>
//      <Field Name="World 2"/>
//  </Set>
//</Root>

int main(int argc, char* argv[])
{
    using boost::property_tree::ptree;
    ptree pt;

    pt.put("Root.Set.Field", "Hello");
    pt.put("Root.Set.Field", "World");

    boost::property_tree::xml_writer_settings<char> settings('\t', 1);
    write_xml("testXml.xml", pt, std::locale(), settings);
    return 0;
}

出力は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<Root>
<Set>
    <Field>World</Field>
</Set>
</Root>

特に、目的のxmlを生成するようにプログラムを変更するにはどうすればよいですか:

  • 同じ名前のノードを複数追加するには? trueそのように追加するpt.put("Root.Set.Field", "Hello", true);とコンパイル時エラーになります
  • xml 属性を設定するには? ( Name="Hello 1") ドキュメントによると、それらを「サブキー」に追加する必要があるようですが、どうすればよいですか?

upd私はそれを試しました: それpt.put("Root.Set.Field.xmlattr.Name", "Hello 1");を見ることを期待していますが<Field Name="Hello 1"/>、それでもうまくいきません。正しい構文を共有できる人を待っています。

upd2 bingo、この構文は機能します。明日も目的の xml を印刷してみます。pt.put("Root.Set.Field.<xmlattr>.Name", "Hello 1");

4

2 に答える 2

0

property_tree は汎用 XML API として意図されたものではありません。アプリケーション構成設定用です。考えてみてください: Windows INI ファイル、または C# .config ファイル、または Java .properties ファイル。これを XML パーサーとして扱おうとすると、満足できなくなります。

代わりに何を使用する必要があるかは、要件によって異なります。たとえば、xercesはエンタープライズ クラスのライブラリです。データの構造をより柔軟にできる場合は、proprty_tree を使用できます。他にも多くの選択肢があります。

于 2013-09-18T14:59:56.427 に答える