Ошибка синтаксического анализа RapidXML XML - PullRequest
0 голосов
/ 01 октября 2010

Я анализирую XML-файл, который довольно прост:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications with XML.</description>
   </book>
</catalog>

И когда я анализирую его, используя настройки по умолчанию, т.е. parse <0> (), вот так:

    ifstream file(xmlFile.c_str(),  ifstream::in );
int length;
file.seekg (0, ios::end);
length = (int)file.tellg();
file.seekg (0, ios::beg);
char xmlBuf[ length + 1 ];
file.read( &xmlBuf[0], length );
xmlBuf[length] = '\0';

document.parse<0>(xmlBuf);

Все узлы находятся в правильных местах и ​​имеют правильную длину при запросе с помощью xml_node.value_size () или xml_node.name_size (), но фактически получают имя или значение в строку или даже просто printf (), этовозвращает много таких вещей, как:

(........./.(..............-.   <titlK.

Кто-нибудь еще сталкивался с этим?

Ответы [ 2 ]

2 голосов
/ 01 октября 2010

Если вы используете C ++, почему бы не сделать это способом C ++?

int main(int argc, char* argv[]) 
{
  std::string buf;
  std::string line;
  std::ifstream in("file.xml");

  // read file into buf
  while(std::getline(in,line))
    buf += line;

  // After that, take a look on the traverse_xml() function implemented
  // here: http://www.ffuts.org/blog/quick-notes-on-how-to-use-rapidxml/
  // It has great stuff!

  return 0;
}
0 голосов
/ 01 октября 2010

Похоже, моей проблемой было просто изменить объявление разбора на:

document.parse<parse_full>();

Спасибо Карлу за указание на http://www.ffuts.org/blog/quick-notes-on-how-to-use-rapidxml/,, это отличный ресурс.

...