CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Page 2 of 2 FirstFirst 12
Results 16 to 20 of 20

Thread: XML Parsing

  1. #16
    Join Date
    Apr 2005
    Posts
    1,828

    Re: XML Parsing

    Quote Originally Posted by VictorN View Post
    Did you try the Microsoft sample code for writing?
    https://code.msdn.microsoft.com/XmlL...hId=1720047283
    There is a code and there is a XML-file example.
    I used this sample code. But It didn't write anything into this sample XML File that I created.

    Code:
    #include <ole2.h>
    #include <xmllite.h>
    #include <stdio.h>
    #include <shlwapi.h>
    
    #pragma warning(disable : 4127)  // conditional expression is constant
    #define CHKHR(stmt)             do { hr = (stmt); if (FAILED(hr)) goto CleanUp; } while(0)
    #define HR(stmt)                do { hr = (stmt); goto CleanUp; } while(0)
    #define SAFE_RELEASE(I)         do { if (I){ I->Release(); } I = NULL; } while(0)
    
    int __cdecl wmain(int argc, _In_reads_(argc) WCHAR* argv[])
    {
        HRESULT hr = S_OK;
        IStream *pOutFileStream = NULL;
        IXmlWriter *pWriter = NULL;
    
        if (argc != 2)
        {
            wprintf(L"Usage: XmlLiteWriter.exe name-of-output-file\n");
            return 0;
        }
    
        //Open writeable output stream
        if (FAILED(hr = SHCreateStreamOnFile(argv[1], STGM_CREATE | STGM_WRITE, &pOutFileStream)))
        {
            wprintf(L"Error creating file writer, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = CreateXmlWriter(__uuidof(IXmlWriter), (void**) &pWriter, NULL)))
        {
            wprintf(L"Error creating xml writer, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->SetOutput(pOutFileStream)))
        {
            wprintf(L"Error, Method: SetOutput, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->SetProperty(XmlWriterProperty_Indent, TRUE)))
        {
            wprintf(L"Error, Method: SetProperty XmlWriterProperty_Indent, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartDocument(XmlStandalone_Omit)))
        {
            wprintf(L"Error, Method: WriteStartDocument, error is %08.8lx", hr);
            HR(hr);
        }
    
        // if you want to use a DTD using either the SYSTEM or PUBLIC identifiers,
        // or if you want to use an internal DTD subset, you can modify the following
        // call to WriteDocType.
        if (FAILED(hr = pWriter->WriteDocType(L"root", NULL, NULL, NULL)))
        {
            wprintf(L"Error, Method: WriteDocType, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteProcessingInstruction(L"xml-stylesheet",
            L"href=\"mystyle.css\" title=\"Compact\" type=\"text/css\"")))
        {
            wprintf(L"Error, Method: WriteProcessingInstruction, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"root", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"sub", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteAttributeString(NULL, L"myAttr", NULL,
                                                      L"1234")))
        {
            wprintf(L"Error, Method: WriteAttributeString, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteString(
                   L"Markup is <escaped> for this string")))
        {
            wprintf(L"Error, Method: WriteString, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteFullEndElement()))
        {
            wprintf(L"Error, Method: WriteFullEndElement, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"anotherChild", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteString(L"some text")))
        {
            wprintf(L"Error, Method: WriteString, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteFullEndElement()))
        {
            wprintf(L"Error, Method: WriteFullEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteCData(L"This is CDATA text.")))
        {
            wprintf(L"Error, Method: WriteCData, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"containsCharacterEntity", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteCharEntity(L'a')))
        {
            wprintf(L"Error, Method: WriteCharEntity, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteFullEndElement()))
        {
            wprintf(L"Error, Method: WriteFullEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"containsChars", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteChars(L"abcdefghijklm", 5)))
        {
            wprintf(L"Error, Method: WriteChars, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteFullEndElement()))
        {
            wprintf(L"Error, Method: WriteFullEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"containsEntity", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteEntityRef(L"myEntity")))
        {
            wprintf(L"Error, Method: WriteEntityRef, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteEndElement()))
        {
            wprintf(L"Error, Method: WriteEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"containsName", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteName(L"myName")))
        {
            wprintf(L"Error, Method: WriteName, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteEndElement()))
        {
            wprintf(L"Error, Method: WriteEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteStartElement(NULL, L"containsNmToken", NULL)))
        {
            wprintf(L"Error, Method: WriteStartElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteNmToken(L"myNmToken")))
        {
            wprintf(L"Error, Method: WriteNmToken, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteEndElement()))
        {
            wprintf(L"Error, Method: WriteEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteComment(L"This is a comment")))
        {
            wprintf(L"Error, Method: WriteComment, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteRaw(L"<elementWrittenRaw/>")))
        {
            wprintf(L"Error, Method: WriteRaw, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteRawChars(L"<rawCharacters/>", 16)))
        {
            wprintf(L"Error, Method: WriteRawChars, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        if (FAILED(hr = pWriter->WriteElementString(NULL, L"myElement", NULL, L"myValue")))
        {
            wprintf(L"Error, Method: WriteElementString, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteFullEndElement()))
        {
            wprintf(L"Error, Method: WriteFullEndElement, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->WriteWhitespace(L"\n")))
        {
            wprintf(L"Error, Method: WriteWhitespace, error is %08.8lx", hr);
            HR(hr);
        }
    
        // WriteEndDocument closes any open elements or attributes
        if (FAILED(hr = pWriter->WriteEndDocument()))
        {
            wprintf(L"Error, Method: WriteEndDocument, error is %08.8lx", hr);
            HR(hr);
        }
        if (FAILED(hr = pWriter->Flush()))
        {
            wprintf(L"Error, Method: Flush, error is %08.8lx", hr);
            HR(hr);
        }
    
    CleanUp:
        SAFE_RELEASE(pOutFileStream);
        SAFE_RELEASE(pWriter);
        return hr;
    }
    These are the contents of the XML File that I created.

    Code:
    <!-- Edited by XMLSpy -->
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Encryption Information</heading>
    <body>CryptoColor enable (Y / N)</body>
    <body>CryptoColor (HEX color code)</body>
    <body>Display Frames = Yes</body>
    <body>Highlighted spam sites = No</body>
    <body>Context Sensitive warning = No</body>
    <body>HW ID = XXXXX</body>
    <body>Product Serial Number = EEFSE-WEXXE-WVRX-FRDXD</body>
    <body>Operating System Version = Windows 8.1</body>
    </note>
    Last edited by maverick786us; November 17th, 2014 at 05:50 AM.

  2. #17
    VictorN's Avatar
    VictorN is offline Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Hanover Germany
    Posts
    20,396

    Re: XML Parsing

    Quote Originally Posted by maverick786us View Post
    I used this sample code. But It didn't write anything into this sample XML File that I created.
    Did you debug this code to be sure there is no any error?
    Victor Nijegorodov

  3. #18
    Join Date
    Apr 2005
    Posts
    1,828

    Re: XML Parsing

    Quote Originally Posted by VictorN View Post
    Did you debug this code to be sure there is no any error?
    There was no error. It went through each and every section. But I didn't see any change in the XML file

  4. #19
    Join Date
    Nov 2000
    Location
    Voronezh, Russia
    Posts
    6,620

    Re: XML Parsing

    Quote Originally Posted by maverick786us View Post
    I used this sample code. But It didn't write anything into this sample XML File that I created.
    This is what your code writes:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE root>
    <?xml-stylesheet href="mystyle.css" title="Compact" type="text/css"?>
    <root>
      <sub myAttr="1234">Markup is &lt;escaped&gt; for this string</sub>
      <anotherChild>some text</anotherChild>
    <![CDATA[This is CDATA text.]]>
    <containsCharacterEntity>&#x61;</containsCharacterEntity>
    <containsChars>abcde</containsChars>
    <containsEntity>&myEntity;</containsEntity>
    <containsName>myName</containsName>
    <containsNmToken>myNmToken</containsNmToken>
    <!--This is a comment-->
    <elementWrittenRaw/>
    <rawCharacters/>
    <myElement>myValue</myElement></root>
    These are the contents of the XML File that I created.

    Code:
    <!-- Edited by XMLSpy -->
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Encryption Information</heading>
    <body>CryptoColor enable (Y / N)</body>
    <body>CryptoColor (HEX color code)</body>
    <body>Display Frames = Yes</body>
    <body>Highlighted spam sites = No</body>
    <body>Context Sensitive warning = No</body>
    <body>HW ID = XXXXX</body>
    <body>Product Serial Number = EEFSE-WEXXE-WVRX-FRDXD</body>
    <body>Operating System Version = Windows 8.1</body>
    </note>
    I don't see how this above could be considered an XML file.
    Best regards,
    Igor

  5. #20
    Join Date
    Apr 2000
    Location
    Belgium (Europe)
    Posts
    4,626

    Re: XML Parsing

    as with many things in software development.
    there rarely is a "best". if there was, then it would be only that one thing, because why use anything other than "best" ?

    So there's libraries that offer advantages to another library and different approaches.

    if your problem is easily solved with a streaming approach, then that would be the prefered route, even though DOM would work also.
    if your problem is easier with DOM, then it's likely going to be hard (if near impossible) to solve wiht a streaming approach.

    DOM has the disadvantage that it needs to load and parse the entire XML up front. and so it needs a lot of memory (at least as much as the xml file, probably more).
    a streaming solution has the advantage of not loading the entire file up front.

    so is xmllite "best". no. it could be for your particular problem, and be totally unusable/unfeasible for your next app where you need to use XML.

Page 2 of 2 FirstFirst 12

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured