Xml 遍历boost属性树

Xml 遍历boost属性树,xml,boost,boost-propertytree,Xml,Boost,Boost Propertytree,我正在使用boost属性迭代XML文档 树并将结果存储在结构中。我的问题是我可以 只能访问第一个“项”节点,不能访问第二个“项” 节点。我希望有人能指出我犯了什么错误 我的程序输出如下所示(您可以看到项目丢失..在那里 是否未显示cookie2、candy2或巧克力2项目): 以下是xml文件: <root> <jar name="snAcks"> <snack name="coOkie"> <item na

我正在使用boost属性迭代XML文档 树并将结果存储在结构中。我的问题是我可以 只能访问第一个“项”节点,不能访问第二个“项” 节点。我希望有人能指出我犯了什么错误

我的程序输出如下所示(您可以看到项目丢失..在那里 是否未显示cookie2、candy2或巧克力2项目):

以下是xml文件:

<root>
    <jar name="snAcks">
        <snack name="coOkie">
           <item name="cooKie1"></item>
           <item name="cookIe2"></item>
        </snack>
        <snack name="canDy">
           <item name="caNdy1"></item>
           <item name="candY2"></item>
        </snack>
        <snack name="cHocolate">
           <item name="choColate1"></item>
           <item name="chocOlate2"></item>
        </snack>
    </jar>
</root>

以下是源代码:

void parse_xml( boost::property_tree::iptree const& pt )
{
    BOOST_FOREACH( boost::property_tree::iptree::value_type const& v, pt.get_child("root.jar") )
    {
        // Show jar
        if ( boost::iequals( v.first, "<xmlattr>" ) )
        {
            std::cout << "jar : " << v.second.get<std::string>("NaME") << std::endl;
        }

        if ( boost::iequals( v.first, "snack" ) )
        {
            // Show snack
            std::cout << "snack : " << v.second.get<std::string>("<xmlattr>.name")  << std::endl;

            try
            {
                BOOST_FOREACH( boost::property_tree::iptree::value_type const& val, v.second.get_child("item") )
                {
                    if ( boost::iequals( val.first, "<xmlattr>" ) ) {
                        // Show item
                        std::cout << "item : " << val.second.get<std::string>("nAmE")  << std::endl;
                    }
                }
            }

            catch (boost::property_tree::ptree_bad_path& e)
            {
                // Show what caused exception
                std::cout << "Exception: " << e.what() << std::endl;
            }
        }
    }
}
void parse_xml(boost::property_tree::iptree const&pt)
{
BOOST\u FOREACH(BOOST::property\u tree::iptree::value\u type const&v,pt.get\u child(“root.jar”))
{
//展示罐
if(boost::iequals(v.first,“”)
{

std::cout我找到了它,但这不是我所说的直观的xml解析器库

void parse_xml( boost::property_tree::iptree const& pt )
{
    BOOST_FOREACH(boost::property_tree::iptree::value_type const& v, pt.get_child("root.jar"))
    {
        // Show jar
        if ( boost::iequals( v.first, "<xmlattr>" ) ) {
            std::cout << "jar : " << v.second.get<std::string>("NaME") << std::endl;
        }

        if ( boost::iequals( v.first, "snack" ) )
        {
            BOOST_FOREACH(boost::property_tree::iptree::value_type const& val, v.second)
            {
                // Show snack
                if ( boost::iequals( val.first, "<xmlattr>" ) ) {
                    std::cout << "snack : " << val.second.get<std::string>("name")  << std::endl;
                }

                if ( boost::iequals(val.first, "item") )
                {
                    BOOST_FOREACH(boost::property_tree::iptree::value_type const& val2, val.second)
                    if ( boost::iequals( val2.first, "<xmlattr>" ) ) {
                        // Show item
                        std::cout << "item : " << val2.second.get<std::string>("nAmE")  << std::endl;
                    }
                }
            }
        }
    }
}
void parse_xml(boost::property_tree::iptree const&pt)
{
BOOST\u FOREACH(BOOST::property\u tree::iptree::value\u type const&v,pt.get\u child(“root.jar”))
{
//展示罐
if(boost::iequals(v.first,“”){

std::我可以添加一个赏金吗?我真的很想知道我在这里做错了什么,或者我是否需要查看其他xml库。谢谢您的帮助!也许
v.second.get\u child(“项目”)
应该是
v.second
,或者
v.second.get\u child(“零食”)
:似乎很相似。谢谢!这很有效。我暂时不能奖励奖金,但只要我可以,它就是你的。我真的很感谢你的时间和建议!”这不是我所说的直观的xml解析器库这是因为属性树不是XML解析器,它不是它的目的。它是用来创建属性树并随着时间的推移而持久化的。你不应该给它提供它没有生成的任意XML。你不应该把它用作快速和肮脏的XML解析器。如果你想C++中解析XML文件的简单方法,我会。推荐使用LIXML2与这个C++包装器结合
void parse_xml( boost::property_tree::iptree const& pt )
{
    BOOST_FOREACH(boost::property_tree::iptree::value_type const& v, pt.get_child("root.jar"))
    {
        // Show jar
        if ( boost::iequals( v.first, "<xmlattr>" ) ) {
            std::cout << "jar : " << v.second.get<std::string>("NaME") << std::endl;
        }

        if ( boost::iequals( v.first, "snack" ) )
        {
            BOOST_FOREACH(boost::property_tree::iptree::value_type const& val, v.second)
            {
                // Show snack
                if ( boost::iequals( val.first, "<xmlattr>" ) ) {
                    std::cout << "snack : " << val.second.get<std::string>("name")  << std::endl;
                }

                if ( boost::iequals(val.first, "item") )
                {
                    BOOST_FOREACH(boost::property_tree::iptree::value_type const& val2, val.second)
                    if ( boost::iequals( val2.first, "<xmlattr>" ) ) {
                        // Show item
                        std::cout << "item : " << val2.second.get<std::string>("nAmE")  << std::endl;
                    }
                }
            }
        }
    }
}