-
November 17th, 2014, 05:46 AM
#16
Re: XML Parsing
 Originally Posted by VictorN
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.
-
November 17th, 2014, 06:31 AM
#17
Re: XML Parsing
 Originally Posted by maverick786us
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
-
November 17th, 2014, 06:45 AM
#18
Re: XML Parsing
 Originally Posted by VictorN
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
-
November 17th, 2014, 07:54 AM
#19
Re: XML Parsing
 Originally Posted by maverick786us
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 <escaped> for this string</sub>
<anotherChild>some text</anotherChild>
<![CDATA[This is CDATA text.]]>
<containsCharacterEntity>a</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
-
November 17th, 2014, 08:36 AM
#20
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.
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|