VirtualBox

Changeset 32565 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Sep 16, 2010 2:39:24 PM (14 years ago)
Author:
vboxsync
Message:

Runtime/Main: add xml/ovf parsing in memory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/xml.cpp

    r30746 r32565  
    13401340////////////////////////////////////////////////////////////////////////////////
    13411341//
     1342// XmlMemParser class
     1343//
     1344////////////////////////////////////////////////////////////////////////////////
     1345
     1346XmlMemParser::XmlMemParser()
     1347    : XmlParserBase()
     1348{
     1349}
     1350
     1351XmlMemParser::~XmlMemParser()
     1352{
     1353}
     1354
     1355/**
     1356 * Parse the given buffer and fills the given Document object with its contents.
     1357 * Throws XmlError on parsing errors.
     1358 *
     1359 * The document that is passed in will be reset before being filled if not empty.
     1360 *
     1361 * @param pvBuf in: memory buffer to parse.
     1362 * @param cbSize in: size of the memory buffer.
     1363 * @param strFilename in: name fo file to parse.
     1364 * @param doc out: document to be reset and filled with data according to file contents.
     1365 */
     1366void XmlMemParser::read(const void* pvBuf, int cbSize,
     1367                        const iprt::MiniString &strFilename,
     1368                        Document &doc)
     1369{
     1370    GlobalLock lock;
     1371//     global.setExternalEntityLoader(ExternalEntityLoader);
     1372
     1373    const char *pcszFilename = strFilename.c_str();
     1374
     1375    doc.m->reset();
     1376    if (!(doc.m->plibDocument = xmlCtxtReadMemory(m_ctxt,
     1377                                                  (const char*)pvBuf,
     1378                                                  cbSize,
     1379                                                  pcszFilename,
     1380                                                  NULL,       // encoding = auto
     1381                                                  XML_PARSE_NOBLANKS)))
     1382        throw XmlError(xmlCtxtGetLastError(m_ctxt));
     1383
     1384    doc.refreshInternals();
     1385}
     1386
     1387////////////////////////////////////////////////////////////////////////////////
     1388//
    13421389// XmlFileParser class
    13431390//
     
    13461393struct XmlFileParser::Data
    13471394{
    1348     xmlParserCtxtPtr ctxt;
    13491395    iprt::MiniString strXmlFilename;
    13501396
    13511397    Data()
    13521398    {
    1353         if (!(ctxt = xmlNewParserCtxt()))
    1354             throw std::bad_alloc();
    13551399    }
    13561400
    13571401    ~Data()
    13581402    {
    1359         xmlFreeParserCtxt(ctxt);
    1360         ctxt = NULL;
    13611403    }
    13621404};
     
    14311473    ReadContext context(pcszFilename);
    14321474    doc.m->reset();
    1433     if (!(doc.m->plibDocument = xmlCtxtReadIO(m->ctxt,
     1475    if (!(doc.m->plibDocument = xmlCtxtReadIO(m_ctxt,
    14341476                                              ReadCallback,
    14351477                                              CloseCallback,
     
    14381480                                              NULL,       // encoding = auto
    14391481                                              XML_PARSE_NOBLANKS)))
    1440         throw XmlError(xmlCtxtGetLastError(m->ctxt));
     1482        throw XmlError(xmlCtxtGetLastError(m_ctxt));
    14411483
    14421484    doc.refreshInternals();
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