| Onega's profileOnegaBlogListsNetwork | Help |
|
|
October 14 Use XPATH to filter "xml:lang" via MSXML in VC6#include "stdafx.h" #include <TCHAR.H> #include <stdio.h> #include <time.h> #import "msxml4.dll" using namespace MSXML2; inline void EVAL_HR( HRESULT _hr ) { if FAILED(_hr) throw(_hr); } void printMSXMLError(const IXMLDOMDocument2Ptr& pXMLDoc) { try { IXMLDOMParseErrorPtr pError = NULL; EVAL_HR(pXMLDoc->get_parseError(&pError) ); _ftprintf(stderr, pError->reason); } catch(...) {//Exception handling } } int main(int argc, char* argv[]) { try { EVAL_HR(CoInitialize(NULL)); // Make sure MSXML 4.0 is installed IXMLDOMDocument2Ptr pXMLDoc = NULL; EVAL_HR(pXMLDoc.CreateInstance("Msxml2.DOMDocument.4.0")); // Load the document synchronously pXMLDoc->async = false; VARIANT_BOOL varLoadResult = pXMLDoc->load(_T("C:\\onega\\Untitled1.xml")); // Load the XML document if (varLoadResult) { pXMLDoc->setProperty("SelectionLanguage", "XPath"); IXMLDOMNodeListPtr pEnglishNodes = pXMLDoc->selectNodes("/employer/*[@xml:lang='en']"); for (long i=0; i<pEnglishNodes->Getlength(); i++) { IXMLDOMNodePtr pEnglishNode = pEnglishNodes->Getitem(i); pEnglishNode->Gettext(); pEnglishNode->GetnodeName(); printf("node name:%s, text:%s\n", (LPCSTR)pEnglishNode->GetnodeName(), (LPCSTR)pEnglishNode->Gettext()); } } else {// Load Failed printMSXMLError(pXMLDoc); } } catch(...) {// Exception handling } CoUninitialize(); return 0; } January 16 empty base64Binary value in XMLMSXML4.0 reports error when an XML element has empty value of base64Binary type. The following url explained that empty value is valid http://lists.w3.org/Archives/Public/xmlschema-dev/2004Aug/0132.html Furthermore, the Second Edition of XMLSchema [2] has a regular expression for base64Binary which explicitly allows empty (base64) encodings. hexBinary is just another encoding of byte sequences. [1] http://www.w3.org/TR/xmlschema-2/#hexBinary[2] http://www.w3.org/TR/2004/PER-xmlschema-2-20040318/#base64Binary |
|
|