Неправильная проверка конечного тега xml в Boost ptree read xml

Я пытаюсь сделать простой анализ XML, используя Boost Ptrees в C++. Однако похоже, что read_xml Функция выдает ошибку только в том случае, если отсутствует конечный тег. Ниже выдает ошибку. Например:

<?xml version="1.0" encoding="utf-8"?>
<Grandparent>
<Parent>test<Parent>
</Grandparent>

Обратите внимание, что конечный тег Parent не имеет закрывающей косой черты, и это выбрасывается как ошибка. Даже отсутствие закрывающего тега вроде <Parent>test выдает допустимую ошибку, которая ожидается.

Однако, если закрывающая строка тега не совпадает с открывающей строкой тега, это не выдает ошибку. Например:

<?xml version="1.0" encoding="utf-8"?>
<Grandparent>
<Parent>test</Child>
</Grandparent>

Вышеуказанные разборы просто отлично. Мой код очень прост, как показано ниже:

using boost::property_tree::ptree;
ptree pt;
read_xml(xmlpath, pt);

Есть ли что-то, что я пропускаю здесь?

1 ответ

Решение

Да.

Самое главное: Boost Property Tree не является библиотекой XML.

Во-вторых, у реализации rapidxml, используемой под капотом, есть проверка закрывающего тега как opt-in:

if (Flags & parse_validate_closing_tags)
{
    // Skip and validate closing tag name
    Ch *closing_name = text;
    skip<node_name_pred, Flags>(text);
    if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
}

Удача в том, что Boost Property не подписался. На самом деле, это не позволяет вам выбрать:

/// Text elements should be put in separate keys,
/// not concatenated in parent data.
static const int no_concat_text  = 0x1;
/// Comments should be omitted.
static const int no_comments     = 0x2;
/// Whitespace should be collapsed and trimmed.
static const int trim_whitespace = 0x4;

inline bool validate_flags(int flags)
{
    return (flags & ~(no_concat_text | no_comments | trim_whitespace)) == 0;
}

Другие флаги запрещены.

Я предлагаю вам обратиться к библиотеке XML, если вам нужен анализ XML.

Другие вопросы по тегам