结束标签XML验证在Boost ptree中读取XML不正确

阿杰·奈尔(Ajay Nair)

我正在尝试使用C ++中的Boost Ptrees做一些简单的xml解析。但是,似乎该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);

我在这里有什么事要注意吗?

看到

是。

最重要的是:Boost属性树不是XML库。

其次,引擎盖下使用的Rapidxml实现具有关闭标签验证作为选择加入:

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库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

读取格式不正确的XML文件且属性中不带引号-python

Python-读取格式不正确的xml文件

在R中解析XML:不正确的名称空间

android xml 中的文本布局不正确

AndroidManifest.xml中的元数据标签的值不正确

从 xml 设置字符串时读取字符串目录不正确

Xml Python-格式不正确

Persistence.xml配置不正确

XML名称空间格式不正确

XML格式不正确-Android

XML解析错误:格式不正确

NetworkX中的边缘标签不正确

混淆矩阵中的标签不正确

ggpairs中的“不正确的图”标签

AngularJS中的格式验证不正确

从boost binary_iarchive读取的数据不正确

将适当的xml转换为不正确的xml

动态生成XSD时,XML模式中的根元素定义不正确

应用程序的AndroidManifest.xml中的元数据标记的值不正确。- 谷歌地图

Jquery 加载函数在 firefox 中抛出“XML 解析错误:格式不正确”错误

在pentaho中,我该如何忽略格式不正确的XML文件并继续其余部分

网站中的配置文件格式不正确的XML错误为什么?

从xml中获取元素文本,该元素文本在节点内部不正确

如何使用 C# 将元素插入格式不正确的 XML 文件中的特定节点?

使用Boost PTree w / o标签解析XML

在格式不正确的XML(包括嵌套标签)的2个标签之间查找文本

文件名,目录名或卷标签语法不正确-尝试在Go lang中读取文件时

如果验证不正确,如何用Java中的J.option立即结束程序

XML代码的浏览器错误:“格式不正确”