如何使用boost库删除最后一个xml节点及其子节点?

如何使用boost库删除最后一个xml节点及其子节点?,xml,boost,boost-propertytree,Xml,Boost,Boost Propertytree,我想从XML文件中删除一个节点 XML字符串如下所示: <BookData> <Book><Author>A1<Author><Name>B1</Name><Price>C1</Price></Book> <Book><Author>A2<Author><Name>B2</Name><Price>C2<

我想从XML文件中删除一个节点

XML字符串如下所示:

<BookData>
   <Book><Author>A1<Author><Name>B1</Name><Price>C1</Price></Book>
   <Book><Author>A2<Author><Name>B2</Name><Price>C2</Price></Book>
     ...
   <Book><Author>A(n-1)<Author><Name>B(n-1)</Name><Price>C(n-1)</Price></Book>
   <Book><Author>A(n)<Author><Name>B(n)</Name><Price>C(n)</Price></Book> 
</BookData>

A1B1C1
A2B2C2
...
A(n-1)B(n-1)C(n-1)
A(n)B(n)C(n)
我希望它能像这样结束

 <BookData>
       <Book><Author>A1<Author><Name>B1</Name><Price>C1</Price></Book>
       <Book><Author>A2<Author><Name>B2</Name><Price>C2</Price></Book>
         ...
       <Book><Author>A(n-1)<Author><Name>B(n-1)</Name><Price>C(n-1)</Price></Book> 
    </BookData>

A1B1C1
A2B2C2
...
A(n-1)B(n-1)C(n-1)

如何使用boost lib实现这一点?

您可以使用反向迭代器
rbegin()
,但是转换到其基本迭代器总是有点棘手:

    auto& root = pt.get_child("BookData");
    root.erase(std::next(root.rbegin()).base());
有一个简洁的插图:

请参见

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

int main() {
    std::istringstream iss(R"(
<BookData>
   <Book><Author>A1</Author><Name>B1</Name><Price>C1</Price></Book>
   <Book><Author>A2</Author><Name>B2</Name><Price>C2</Price></Book>
   <Book><Author>A(n-1)</Author><Name>B(n-1)</Name><Price>C(n-1)</Price></Book>
   <Book><Author>A(n)</Author><Name>B(n)</Name><Price>C(n)</Price></Book> 
</BookData>
)");

    boost::property_tree::ptree pt;
    read_xml(iss, pt);

    auto& root = pt.get_child("BookData");
    root.erase(std::next(root.rbegin()).base());

    write_xml(std::cout, pt, boost::property_tree::xml_writer_make_settings<std::string>(' ', 4));
}
#包括
#包括
int main(){
标准::istringstream iss(R)(
A1B1C1
A2B2C2
A(n-1)B(n-1)C(n-1)
A(n)B(n)C(n)
)");
boost::property_tree::ptree pt;
读取xml(iss、pt);
auto&root=pt.get_child(“BookData”);
root.erase(std::next(root.rbegin()).base());
编写xml(std::cout,pt,boost::property\u tree::xml\u writer\u make\u settings(“”,4));
}
印刷品

<?xml version="1.0" encoding="utf-8"?>
<BookData>

    <Book>
        <Author>A1</Author>
        <Name>B1</Name>
        <Price>C1</Price>
    </Book>
    <Book>
        <Author>A2</Author>
        <Name>B2</Name>
        <Price>C2</Price>
    </Book>
    <Book>
        <Author>A(n-1)</Author>
        <Name>B(n-1)</Name>
        <Price>C(n-1)</Price>
    </Book>
</BookData>

A1
地下一层
C1
A2
地下二层
C2
A(n-1)
B(n-1)
C(n-1)

非常感谢。但我有一个小问题。如果
是一个随机名称,如何获取
节点的父节点?@ThếHả印古语ễ嗯哼。你只需编写代码就可以了。或者,您可以使用XML库,而不是PropertyTree库。