VirtualBox

Changeset 17573 in vbox for trunk


Ignore:
Timestamp:
Mar 9, 2009 1:02:45 PM (16 years ago)
Author:
vboxsync
Message:

xml: separate element, attribute and content nodes

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/xml.h

    r17417 r17573  
    447447 */
    448448
    449 class Node;
    450 typedef std::list<const Node*> NodesList;
     449class ElementNode;
     450typedef std::list<const ElementNode*> ElementNodesList;
     451
     452class AttributeNode;
     453
     454class ContentNode;
    451455
    452456class VBOXXML_CLASS Node
     
    464468    int getLineNumber() const;
    465469
    466     int getChildElements(NodesList &children,
     470    int isElement()
     471    {
     472        return mType == IsElement;
     473    }
     474
     475protected:
     476    typedef enum {IsElement, IsAttribute, IsContent} EnumType;
     477    EnumType mType;
     478
     479    // hide the default constructor so people use only our factory methods
     480    Node(EnumType type);
     481    Node(const Node &x);      // no copying
     482
     483    void buildChildren();
     484
     485    /* Obscure class data */
     486    struct Data;
     487    Data *m;
     488};
     489
     490class VBOXXML_CLASS ElementNode : public Node
     491{
     492public:
     493    int getChildElements(ElementNodesList &children,
    467494                         const char *pcszMatch = NULL) const;
    468495
    469     const Node* findChildElement(const char *pcszMatch) const;
    470     const Node* findChildElementFromId(const char *pcszId) const;
    471 
    472     const Node* findAttribute(const char *pcszMatch) const;
     496    const ElementNode* findChildElement(const char *pcszMatch) const;
     497    const ElementNode* findChildElementFromId(const char *pcszId) const;
     498
     499    const AttributeNode* findAttribute(const char *pcszMatch) const;
    473500    bool getAttributeValue(const char *pcszMatch, com::Utf8Str &str) const;
    474501    bool getAttributeValue(const char *pcszMatch, int64_t &i) const;
    475502    bool getAttributeValue(const char *pcszMatch, uint64_t &i) const;
    476503
    477     Node* createChild(const char *pcszElementName);
    478     Node* addContent(const char *pcszContent);
    479     Node* setAttribute(const char *pcszName, const char *pcszValue);
    480 
    481 private:
     504    ElementNode* createChild(const char *pcszElementName);
     505    ContentNode* addContent(const char *pcszContent);
     506    AttributeNode* setAttribute(const char *pcszName, const char *pcszValue);
     507
     508protected:
    482509    // hide the default constructor so people use only our factory methods
    483     Node();
    484 
     510    ElementNode();
     511    ElementNode(const ElementNode &x);      // no copying
     512
     513    friend class Node;
    485514    friend class Document;
    486515    friend class XmlFileParser;
    487 
    488     Node(const Node &x);      // no copying
    489 
    490     void buildChildren();
    491 
    492     /* Obscure class data */
    493     struct Data;
    494     Data *m;
     516};
     517
     518class VBOXXML_CLASS ContentNode : public Node
     519{
     520public:
     521
     522protected:
     523    // hide the default constructor so people use only our factory methods
     524    ContentNode();
     525    ContentNode(const ContentNode &x);      // no copying
     526
     527    friend class Node;
     528    friend class ElementNode;
     529};
     530
     531class VBOXXML_CLASS AttributeNode : public Node
     532{
     533public:
     534
     535protected:
     536    // hide the default constructor so people use only our factory methods
     537    AttributeNode();
     538    AttributeNode(const AttributeNode &x);      // no copying
     539
     540    friend class Node;
     541    friend class ElementNode;
    495542};
    496543
     
    503550{
    504551public:
    505     NodesLoop(const Node &node, const char *pcszMatch = NULL);
     552    NodesLoop(const ElementNode &node, const char *pcszMatch = NULL);
    506553    ~NodesLoop();
    507     const Node* forAllNodes() const;
     554    const ElementNode* forAllNodes() const;
    508555
    509556private:
     
    527574    Document& operator=(const Document &x);
    528575
    529     const Node* getRootElement() const;
    530 
    531     Node* createRootElement(const char *pcszRootElementName);
     576    const ElementNode* getRootElement() const;
     577
     578    ElementNode* createRootElement(const char *pcszRootElementName);
    532579
    533580private:
  • trunk/src/VBox/Main/ApplianceImpl.cpp

    r17566 r17573  
    373373 */
    374374HRESULT Appliance::LoopThruSections(const char *pcszPath,
    375                                     const xml::Node *pReferencesElem,
    376                                     const xml::Node *pCurElem)
     375                                    const xml::ElementNode *pReferencesElem,
     376                                    const xml::ElementNode *pCurElem)
    377377{
    378378    HRESULT rc;
    379379
    380380    xml::NodesLoop loopChildren(*pCurElem);
    381     const xml::Node *pElem;
     381    const xml::ElementNode *pElem;
    382382    while ((pElem = loopChildren.forAllNodes()))
    383383    {
    384384        const char *pcszElemName = pElem->getName();
    385385        const char *pcszTypeAttr = "";
    386         const xml::Node *pTypeAttr;
     386        const xml::AttributeNode *pTypeAttr;
    387387        if ((pTypeAttr = pElem->findAttribute("type")))
    388388            pcszTypeAttr = pTypeAttr->getValue();
     
    458458 */
    459459HRESULT Appliance::HandleDiskSection(const char *pcszPath,
    460                                      const xml::Node *pReferencesElem,
    461                                      const xml::Node *pSectionElem)
     460                                     const xml::ElementNode *pReferencesElem,
     461                                     const xml::ElementNode *pSectionElem)
    462462{
    463463    // contains "Disk" child elements
    464464    xml::NodesLoop loopDisks(*pSectionElem, "Disk");
    465     const xml::Node *pelmDisk;
     465    const xml::ElementNode *pelmDisk;
    466466    while ((pelmDisk = loopDisks.forAllNodes()))
    467467    {
     
    484484            {
    485485                // look up corresponding /References/File nodes (list built above)
    486                 const xml::Node *pFileElem;
     486                const xml::ElementNode *pFileElem;
    487487                if (    pReferencesElem
    488488                     && ((pFileElem = pReferencesElem->findChildElementFromId(strFileRef.c_str())))
     
    537537 */
    538538HRESULT Appliance::HandleNetworkSection(const char *pcszPath,
    539                                         const xml::Node *pSectionElem)
     539                                        const xml::ElementNode *pSectionElem)
    540540{
    541541    // we ignore network sections for now
     
    567567 */
    568568HRESULT Appliance::HandleVirtualSystemContent(const char *pcszPath,
    569                                               const xml::Node *pelmVirtualSystem)
     569                                              const xml::ElementNode *pelmVirtualSystem)
    570570{
    571571    VirtualSystem vsys;
    572572
    573     const xml::Node *pIdAttr = pelmVirtualSystem->findAttribute("id");
     573    const xml::AttributeNode *pIdAttr = pelmVirtualSystem->findAttribute("id");
    574574    if (pIdAttr)
    575575        vsys.strName = pIdAttr->getValue();
    576576
    577577    xml::NodesLoop loop(*pelmVirtualSystem);      // all child elements
    578     const xml::Node *pelmThis;
     578    const xml::ElementNode *pelmThis;
    579579    while ((pelmThis = loop.forAllNodes()))
    580580    {
    581581        const char *pcszElemName = pelmThis->getName();
    582         const xml::Node *pTypeAttr = pelmThis->findAttribute("type");
     582        const xml::AttributeNode *pTypeAttr = pelmThis->findAttribute("type");
    583583        const char *pcszTypeAttr = (pTypeAttr) ? pTypeAttr->getValue() : "";
    584584
     
    590590            </EulaSection> */
    591591
    592             const xml::Node *pelmInfo, *pelmLicense;
     592            const xml::ElementNode *pelmInfo, *pelmLicense;
    593593            if (    ((pelmInfo = pelmThis->findChildElement("Info")))
    594594                 && ((pelmLicense = pelmThis->findChildElement("License")))
     
    603603                )
    604604        {
    605             const xml::Node *pelmSystem, *pelmVirtualSystemType;
     605            const xml::ElementNode *pelmSystem, *pelmVirtualSystemType;
    606606            if ((pelmSystem = pelmThis->findChildElement("System")))
    607607            {
     
    618618
    619619            xml::NodesLoop loopVirtualHardwareItems(*pelmThis, "Item");      // all "Item" child elements
    620             const xml::Node *pelmItem;
     620            const xml::ElementNode *pelmItem;
    621621            while ((pelmItem = loopVirtualHardwareItems.forAllNodes()))
    622622            {
     
    626626
    627627                xml::NodesLoop loopItemChildren(*pelmItem);      // all child elements
    628                 const xml::Node *pelmItemChild;
     628                const xml::ElementNode *pelmItemChild;
    629629                while ((pelmItemChild = loopItemChildren.forAllNodes()))
    630630                {
     
    12521252                    doc);
    12531253
    1254         const xml::Node *pRootElem = doc.getRootElement();
     1254        const xml::ElementNode *pRootElem = doc.getRootElement();
    12551255        if (strcmp(pRootElem->getName(), "Envelope"))
    12561256            return setError(VBOX_E_FILE_ERROR,
     
    12671267        // get all "File" child elements of "References" section so we can look up files easily;
    12681268        // first find the "References" sections so we can look up files
    1269         xml::NodesList listFileElements;      // receives all /Envelope/References/File nodes
    1270         const xml::Node *pReferencesElem;
     1269        xml::ElementNodesList listFileElements;      // receives all /Envelope/References/File nodes
     1270        const xml::ElementNode *pReferencesElem;
    12711271        if ((pReferencesElem = pRootElem->findChildElement("References")))
    12721272            pReferencesElem->getChildElements(listFileElements, "File");
     
    24652465    {
    24662466        xml::Document doc;
    2467         xml::Node *pelmRoot = doc.createRootElement("Envelope");
     2467        xml::ElementNode *pelmRoot = doc.createRootElement("Envelope");
    24682468
    24692469        pelmRoot->setAttribute("ovf:version", "1.0");
     
    24792479
    24802480        // <Envelope>/<References>
    2481         xml::Node *pelmReferences = pelmRoot->createChild("References");
     2481        xml::ElementNode *pelmReferences = pelmRoot->createChild("References");
    24822482                // @ŧodo
    24832483
     
    24872487                <Disk ovf:capacity="4294967296" ovf:diskId="lamp" ovf:format="http://www.vmware.com/specifications/vmdk.html#compressed" ovf:populatedSize="1924967692"/>
    24882488            </DiskSection> */
    2489         xml::Node *pelmDiskSection = pelmRoot->createChild("DiskSection");
    2490         xml::Node *pelmDiskSectionInfo = pelmDiskSection->createChild("Info");
     2489        xml::ElementNode *pelmDiskSection = pelmRoot->createChild("DiskSection");
     2490        xml::ElementNode *pelmDiskSectionInfo = pelmDiskSection->createChild("Info");
    24912491        pelmDiskSectionInfo->addContent("List of the virtual disks used in the package");
    24922492        // @todo for each disk:
    2493         // xml::Node *pelmDisk = pelmDiskSection->createChild("Disk");
     2493        // xml::ElementNode *pelmDisk = pelmDiskSection->createChild("Disk");
    24942494
    24952495        /* <Envelope>/<NetworkSection>:
     
    25002500                </Network>
    25012501            </NetworkSection> */
    2502         xml::Node *pelmNetworkSection = pelmRoot->createChild("NetworkSection");
    2503         xml::Node *pelmNetworkSectionInfo = pelmNetworkSection->createChild("Info");
     2502        xml::ElementNode *pelmNetworkSection = pelmRoot->createChild("NetworkSection");
     2503        xml::ElementNode *pelmNetworkSectionInfo = pelmNetworkSection->createChild("Info");
    25042504        pelmNetworkSectionInfo->addContent("Logical networks used in the package");
    25052505        // for now, set up a map so we have a list of unique network names (to make
     
    25092509
    25102510        // and here come the virtual systems:
    2511         xml::Node *pelmVirtualSystemCollection = pelmRoot->createChild("VirtualSystemCollection");
    2512         xml::Node *pattrVirtualSystemCollectionId = pelmVirtualSystemCollection->setAttribute("ovf:id", "ExportedVirtualBoxMachines");      // whatever
     2511        xml::ElementNode *pelmVirtualSystemCollection = pelmRoot->createChild("VirtualSystemCollection");
     2512        xml::AttributeNode *pattrVirtualSystemCollectionId = pelmVirtualSystemCollection->setAttribute("ovf:id", "ExportedVirtualBoxMachines");      // whatever
    25132513
    25142514        list< ComObjPtr<VirtualSystemDescription> >::const_iterator it;
     
    25202520            ComObjPtr<VirtualSystemDescription> vsdescThis = (*it);
    25212521
    2522             xml::Node *pelmVirtualSystem = pelmVirtualSystemCollection->createChild("VirtualSystem");
    2523             xml::Node *pelmVirtualSystemInfo = pelmVirtualSystem->createChild("Info");      // @todo put in description here after implementing an entry for it
     2522            xml::ElementNode *pelmVirtualSystem = pelmVirtualSystemCollection->createChild("VirtualSystem");
     2523            xml::ElementNode *pelmVirtualSystemInfo = pelmVirtualSystem->createChild("Info");      // @todo put in description here after implementing an entry for it
    25242524
    25252525            std::list<VirtualSystemDescriptionEntry*> llName = vsdescThis->findByType(VirtualSystemDescriptionType_Name);
     
    25302530                    <Description>Linux 2.6.x</Description>
    25312531                </OperatingSystemSection> */
    2532             xml::Node *pelmOperatingSystemSection = pelmVirtualSystem->createChild("OperatingSystemSection");
     2532            xml::ElementNode *pelmOperatingSystemSection = pelmVirtualSystem->createChild("OperatingSystemSection");
    25332533            pelmOperatingSystemSection->setAttribute("ovf:id", "82");
    25342534                    // @todo convert vbox OS type into OVF ID
     
    25372537
    25382538            // <VirtualHardwareSection ovf:id="hw1" ovf:transport="iso">
    2539             xml::Node *pelmVirtualHardwareSection = pelmVirtualSystem->createChild("VirtualHardwareSection");
     2539            xml::ElementNode *pelmVirtualHardwareSection = pelmVirtualSystem->createChild("VirtualHardwareSection");
    25402540
    25412541            /*  <System>
     
    25462546                    <vssd:VirtualSystemType>vmx-4</vssd:VirtualSystemType>
    25472547                </System> */
    2548             xml::Node *pelmSystem = pelmVirtualHardwareSection->createChild("System");
     2548            xml::ElementNode *pelmSystem = pelmVirtualHardwareSection->createChild("System");
    25492549
    25502550            // <vssd:VirtualSystemType>vmx-4</vssd:VirtualSystemType>
    2551             xml::Node *pelmVirtualSystemType = pelmSystem->createChild("VirtualSystemType");
     2551            xml::ElementNode *pelmVirtualSystemType = pelmSystem->createChild("VirtualSystemType");
    25522552            pelmVirtualSystemType->addContent("virtualbox-2.2");            // instead of vmx-7?
    25532553
     
    26772677                if (type)
    26782678                {
    2679                     xml::Node *pItem;
     2679                    xml::ElementNode *pItem;
    26802680                    pItem = pelmVirtualHardwareSection->createChild("Item");
    26812681
     
    27142714        {
    27152715            const Utf8Str &strNetwork = itN->first;
    2716             xml::Node *pelmNetwork = pelmNetworkSection->createChild("Network");
     2716            xml::ElementNode *pelmNetwork = pelmNetworkSection->createChild("Network");
    27172717            pelmNetwork->setAttribute("ovf:name", strNetwork.c_str());
    2718             pelmNetwork->createChild("<Description>")->addContent("Logical network used by this appliance.");
     2718            pelmNetwork->createChild("Description")->addContent("Logical network used by this appliance.");
    27192719        }
    27202720
  • trunk/src/VBox/Main/include/ApplianceImpl.h

    r17343 r17573  
    3030{
    3131    class Node;
     32    class ElementNode;
    3233}
    3334
     
    8889    Data *m;
    8990
    90     HRESULT LoopThruSections(const char *pcszPath, const xml::Node *pReferencesElem, const xml::Node *pCurElem);
    91     HRESULT HandleDiskSection(const char *pcszPath, const xml::Node *pReferencesElem, const xml::Node *pSectionElem);
    92     HRESULT HandleNetworkSection(const char *pcszPath, const xml::Node *pSectionElem);
    93     HRESULT HandleVirtualSystemContent(const char *pcszPath, const xml::Node *pContentElem);
     91    HRESULT LoopThruSections(const char *pcszPath, const xml::ElementNode *pReferencesElem, const xml::ElementNode *pCurElem);
     92    HRESULT HandleDiskSection(const char *pcszPath, const xml::ElementNode *pReferencesElem, const xml::ElementNode *pSectionElem);
     93    HRESULT HandleNetworkSection(const char *pcszPath, const xml::ElementNode *pSectionElem);
     94    HRESULT HandleVirtualSystemContent(const char *pcszPath, const xml::ElementNode *pContentElem);
    9495
    9596    HRESULT searchUniqueVMName(Utf8Str& aName) const;
  • trunk/src/VBox/Main/xml/xml.cpp

    r17560 r17573  
    427427
    428428    // attributes, if this is an element; can be empty
    429     typedef std::map<const char*, boost::shared_ptr<Node>, compare_const_char > AttributesMap;
     429    typedef std::map<const char*, boost::shared_ptr<AttributeNode>, compare_const_char > AttributesMap;
    430430    AttributesMap attribs;
    431431
     
    435435};
    436436
    437 Node::Node()
    438     : m(new Data)
     437Node::Node(EnumType type)
     438    : mType(type),
     439      m(new Data)
    439440{
    440441    m->plibNode = NULL;
     
    455456    {
    456457        const char *pcszAttribName = (const char*)plibAttr->name;
    457         boost::shared_ptr<Node> pNew(new Node);
     458        boost::shared_ptr<AttributeNode> pNew(new AttributeNode);
    458459        pNew->m->plibAttr = plibAttr;
    459460        pNew->m->pcszName = (const char*)plibAttr->name;
     
    469470    while (plibNode)
    470471    {
    471         // create a new Node for this child element
    472         boost::shared_ptr<Node> pNew(new Node);
     472        boost::shared_ptr<Node> pNew;
     473
     474        if (plibNode->name)
     475            pNew = boost::shared_ptr<Node>(new ElementNode);
     476        else
     477            pNew = boost::shared_ptr<Node>(new ContentNode);
     478
    473479        pNew->m->plibNode = plibNode;
    474480        pNew->m->pcszName = (const char*)plibNode->name;
     
    593599}
    594600
     601ElementNode::ElementNode()
     602    : Node(IsElement)
     603{
     604}
     605
    595606/**
    596607 * Builds a list of direct child elements of the current element that
     
    601612 * @return Number of items appended to the list (0 if none).
    602613 */
    603 int Node::getChildElements(NodesList &children,
    604                               const char *pcszMatch /*= NULL*/)
     614int ElementNode::getChildElements(ElementNodesList &children,
     615                                  const char *pcszMatch /*= NULL*/)
    605616    const
    606617{
     
    618629           )
    619630        {
    620             children.push_back((*it).get());
     631            Node *pNode = (*it).get();
     632            if (pNode->isElement())
     633                children.push_back(static_cast<ElementNode*>(pNode));
    621634            ++i;
    622635        }
     
    630643 * @return
    631644 */
    632 const Node* Node::findChildElement(const char *pcszMatch)
     645const ElementNode* ElementNode::findChildElement(const char *pcszMatch)
    633646    const
    634647{
     
    640653         ++it)
    641654    {
    642         if (!strcmp(pcszMatch, (**it).getName())) // the element name matches
    643             return (*it).get();
     655        if ((**it).isElement())
     656        {
     657            ElementNode *pelm = static_cast<ElementNode*>((*it).get());
     658            if (!strcmp(pcszMatch, pelm->getName())) // the element name matches
     659                return pelm;
     660        }
    644661    }
    645662
     
    652669 * @return child element or NULL if not found.
    653670 */
    654 const Node* Node::findChildElementFromId(const char *pcszId) const
     671const ElementNode* ElementNode::findChildElementFromId(const char *pcszId) const
    655672{
    656673    Data::InternalNodesList::const_iterator
     
    661678         ++it)
    662679    {
    663         const Node *pElem = (*it).get();
    664         const Node *pAttr;
    665         if (    ((pAttr = pElem->findAttribute("id")))
    666              && (!strcmp(pAttr->getValue(), pcszId))
    667            )
    668             return pElem;
     680        if ((**it).isElement())
     681        {
     682            ElementNode *pelm = static_cast<ElementNode*>((*it).get());
     683            const AttributeNode *pAttr;
     684            if (    ((pAttr = pelm->findAttribute("id")))
     685                 && (!strcmp(pAttr->getValue(), pcszId))
     686               )
     687                return pelm;
     688        }
    669689    }
    670690
     
    677697 * @return
    678698 */
    679 const Node* Node::findAttribute(const char *pcszMatch) const
     699const AttributeNode* ElementNode::findAttribute(const char *pcszMatch) const
    680700{
    681701    Data::AttributesMap::const_iterator it;
     
    696716 * @return TRUE if attribute was found and str was thus updated.
    697717 */
    698 bool Node::getAttributeValue(const char *pcszMatch, com::Utf8Str &str) const
     718bool ElementNode::getAttributeValue(const char *pcszMatch, com::Utf8Str &str) const
    699719{
    700720    const Node* pAttr;
     
    718738 * @return TRUE if attribute was found and str was thus updated.
    719739 */
    720 bool Node::getAttributeValue(const char *pcszMatch, int64_t &i) const
     740bool ElementNode::getAttributeValue(const char *pcszMatch, int64_t &i) const
    721741{
    722742    com::Utf8Str str;
     
    739759 * @return TRUE if attribute was found and str was thus updated.
    740760 */
    741 bool Node::getAttributeValue(const char *pcszMatch, uint64_t &i) const
     761bool ElementNode::getAttributeValue(const char *pcszMatch, uint64_t &i) const
    742762{
    743763    com::Utf8Str str;
     
    757777 * @return
    758778 */
    759 Node* Node::createChild(const char *pcszElementName)
     779ElementNode* ElementNode::createChild(const char *pcszElementName)
    760780{
    761781    // we must be an element, not an attribute
     
    771791
    772792    // now wrap this in C++
    773     Node *p = new Node;
    774     boost::shared_ptr<Node> pNew(p);
     793    ElementNode *p = new ElementNode;
     794    boost::shared_ptr<ElementNode> pNew(p);
    775795    pNew->m->plibNode = plibNode;
    776796    pNew->m->pcszName = (const char*)plibNode->name;
     
    789809 * @return
    790810 */
    791 Node* Node::addContent(const char *pcszContent)
    792 {
    793     // we must be an element, not an attribute
    794     if (!m->plibNode)
    795         throw ENodeIsNotElement(RT_SRC_POS);
    796 
     811ContentNode* ElementNode::addContent(const char *pcszContent)
     812{
    797813    // libxml side: create new node
    798814    xmlNode *plibNode;
     
    802818
    803819    // now wrap this in C++
    804     Node *p = new Node;
    805     boost::shared_ptr<Node> pNew(p);
     820    ContentNode *p = new ContentNode;
     821    boost::shared_ptr<ContentNode> pNew(p);
    806822    pNew->m->plibNode = plibNode;
    807823    pNew->m->pcszName = NULL;
     
    813829
    814830/**
    815  * Sets the given attribute. Assumes that "this" is an element node,
    816  * otherwise ENodeIsNotElement is thrown.
     831 * Sets the given attribute.
    817832 *
    818833 * If an attribute with the given name exists, it is overwritten,
     
    824839 * @return
    825840 */
    826 Node* Node::setAttribute(const char *pcszName, const char *pcszValue)
    827 {
    828     // we must be an element, not an attribute
    829     if (!m->plibNode)
    830         throw ENodeIsNotElement(RT_SRC_POS);
    831 
     841AttributeNode* ElementNode::setAttribute(const char *pcszName, const char *pcszValue)
     842{
    832843    Data::AttributesMap::const_iterator it;
    833844
     
    840851
    841852        // C++ side: create an attribute node around it
    842         boost::shared_ptr<Node> pNew(new Node);
     853        boost::shared_ptr<AttributeNode> pNew(new AttributeNode);
    843854        pNew->m->plibAttr = plibAttr;
    844855        pNew->m->pcszName = (const char*)plibAttr->name;
     
    858869
    859870
     871AttributeNode::AttributeNode()
     872    : Node(IsAttribute)
     873{
     874}
     875
     876ContentNode::ContentNode()
     877    : Node(IsContent)
     878{
     879}
     880
    860881/*
    861882 * NodesLoop
     
    865886struct NodesLoop::Data
    866887{
    867     NodesList listElements;
    868     NodesList::const_iterator it;
     888    ElementNodesList listElements;
     889    ElementNodesList::const_iterator it;
    869890};
    870891
    871 NodesLoop::NodesLoop(const Node &node, const char *pcszMatch /* = NULL */)
     892NodesLoop::NodesLoop(const ElementNode &node, const char *pcszMatch /* = NULL */)
    872893{
    873894    m = new Data;
     
    897918 * @return
    898919 */
    899 const Node* NodesLoop::forAllNodes() const
    900 {
    901     const Node *pNode = NULL;
     920const ElementNode* NodesLoop::forAllNodes() const
     921{
     922    const ElementNode *pNode = NULL;
    902923
    903924    if (m->it != m->listElements.end())
     
    919940{
    920941    xmlDocPtr   plibDocument;
    921     Node        *pRootElement;
     942    ElementNode *pRootElement;
    922943
    923944    Data()
     
    9861007void Document::refreshInternals() // private
    9871008{
    988     m->pRootElement = new Node();
     1009    m->pRootElement = new ElementNode();
    9891010    m->pRootElement->m->plibNode = xmlDocGetRootElement(m->plibDocument);
    9901011    m->pRootElement->m->pcszName = (const char*)m->pRootElement->m->plibNode->name;
     
    9971018 * @return
    9981019 */
    999 const Node* Document::getRootElement() const
     1020const ElementNode* Document::getRootElement() const
    10001021{
    10011022    return m->pRootElement;
     
    10061027 * only work if the document is empty; otherwise EDocumentNotEmpty is thrown.
    10071028 */
    1008 Node* Document::createRootElement(const char *pcszRootElementName)
     1029ElementNode* Document::createRootElement(const char *pcszRootElementName)
    10091030{
    10101031    if (m->pRootElement || m->plibDocument)
     
    10201041
    10211042    // now wrap this in C++
    1022     m->pRootElement = new Node();
     1043    m->pRootElement = new ElementNode();
    10231044    m->pRootElement->m->plibNode = plibRootNode;
    10241045    m->pRootElement->m->pcszName = (const char*)plibRootNode->name;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette