Search code examples
c++xmlpugixml

pugixml, select specific child according to value from other child


I'm using pugixml with C++ which works perfectly. However, I would like to be able to choose a specific child from a structure like this:

<utcTimeOffsetInfo>
    <UtcTimeOffsetDefinition>
        <utcTimeOffsetCode>1</utcTimeOffsetCode>
        <utcTimeOffset>+0100</utcTimeOffset>
    </UtcTimeOffsetDefinition>
    <UtcTimeOffsetDefinition> 
        <utcTimeOffsetCode>2</utcTimeOffsetCode>
        <utcTimeOffset>+0200</utcTimeOffset>
    </UtcTimeOffsetDefinition>
    <UtcTimeOffsetDefinition>
        <utcTimeOffsetCode>3</utcTimeOffsetCode>
        ...

If I want to get the value +0200, it would be nice to be able to do something like:

...child("utcTimeOffsetInfo").child("UtcTimeOffsetDefinition").child_value[utcTimeOffsetCode=2]("utcTimeOffset")

I've looked at find_child_by_attribute, but it does not seem to fit the purpose.


Solution

  • You should use XPath for that.

    doc.select_node("utcTimeOffsetInfo/UtcTimeOffsetDefinition[utcTimeOffsetCode=2]/utcTimeOffset")
    

    (note: select_node is a short-hand for select_single_node that is available since pugixml 1.5)