⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlreader.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/Config.h>#include <errno.h>#include <cctype>#include <cstdio>#include <cstdlib>#if defined(PEGASUS_OS_TYPE_UNIX) || defined(PEGASUS_OS_VMS)# include <errno.h>#endif#include "CIMName.h"#include "XmlReader.h"#include "XmlWriter.h"#include "CIMQualifier.h"#include "CIMQualifierDecl.h"#include "CIMClass.h"#include "CIMInstance.h"#include "CIMObject.h"#include "CIMParamValue.h"#include "System.h"#include "XmlConstants.h"#ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM# include "EBCDIC_OS400.h"#endif#include <Pegasus/Common/MessageLoader.h>#include <Pegasus/Common/AutoPtr.h>#include "CIMNameUnchecked.h"#define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000))#define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF)PEGASUS_USING_STD;PEGASUS_NAMESPACE_BEGINstatic const Uint32 MESSAGE_SIZE = 128;//------------------------------------------------------------------------------//// getXmlDeclaration()////     <?xml version="1.0" encoding="utf-8"?>////------------------------------------------------------------------------------void XmlReader::getXmlDeclaration(    XmlParser& parser,    const char*& xmlVersion,    const char*& xmlEncoding){    XmlEntry entry;    if (!parser.next(entry) ||        entry.type != XmlEntry::XML_DECLARATION ||        strcmp(entry.text, "xml") != 0)    {        MessageLoaderParms mlParms(            "Common.XmlReader.EXPECTED_XML_STYLE",            "Expected <?xml ... ?> style declaration");        throw XmlValidationError(parser.getLine(), mlParms);    }    if (!entry.getAttributeValue("version", xmlVersion))    {        MessageLoaderParms mlParms(            "Common.XmlReader.MISSING_XML_ATTRIBUTE",            "missing xml.version attribute");        throw XmlValidationError(parser.getLine(), mlParms);    }    if (!entry.getAttributeValue("encoding", xmlEncoding))    {        // ATTN-RK-P3-20020403:  Is there a default encoding?    }}//------------------------------------------------------------------------------////  testXmlDeclaration ()////------------------------------------------------------------------------------Boolean XmlReader::testXmlDeclaration (    XmlParser& parser,    XmlEntry& entry){    if (!parser.next (entry) ||        entry.type != XmlEntry::XML_DECLARATION ||        strcmp (entry.text, "xml") != 0)    {        parser.putBack (entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// expectStartTag()////------------------------------------------------------------------------------void XmlReader::expectStartTag(    XmlParser& parser,    XmlEntry& entry,    const char* tagName){    if (!parser.next(entry) ||        entry.type != XmlEntry::START_TAG ||        strcmp(entry.text, tagName) != 0)    {        MessageLoaderParms mlParms(            "Common.XmlReader.EXPECTED_OPEN",            "Expected open of $0 element",            tagName);        throw XmlValidationError(parser.getLine(), mlParms);    }}//------------------------------------------------------------------------------//// expectEndTag()////------------------------------------------------------------------------------void XmlReader::expectEndTag(XmlParser& parser, const char* tagName){    XmlEntry entry;    if (!parser.next(entry) ||        entry.type != XmlEntry::END_TAG ||        strcmp(entry.text, tagName) != 0)    {        MessageLoaderParms mlParms(            "Common.XmlReader.EXPECTED_CLOSE",            "Expected close of $0 element, got $1 instead",            tagName,entry.text);        throw XmlValidationError(parser.getLine(), mlParms);    }}//------------------------------------------------------------------------------//// expectStartTagOrEmptyTag()////------------------------------------------------------------------------------void XmlReader::expectStartTagOrEmptyTag(    XmlParser& parser,    XmlEntry& entry,    const char* tagName){    if (!parser.next(entry) ||        (entry.type != XmlEntry::START_TAG &&        entry.type != XmlEntry::EMPTY_TAG) ||        strcmp(entry.text, tagName) != 0)    {        MessageLoaderParms mlParms(            "Common.XmlReader.EXPECTED_OPENCLOSE",            "Expected either open or open/close $0 element",            tagName);        throw XmlValidationError(parser.getLine(), mlParms);    }}//------------------------------------------------------------------------------//// expectContentOrCData()////------------------------------------------------------------------------------Boolean XmlReader::expectContentOrCData(    XmlParser& parser,    XmlEntry& entry){    if (!parser.next(entry) ||        (entry.type != XmlEntry::CONTENT &&        entry.type != XmlEntry::CDATA))    {        MessageLoaderParms mlParms(            "Common.XmlReader.EXPECTED_CDATA",            "Expected content of CDATA");        throw XmlValidationError(parser.getLine(), mlParms);    }    return true;}//------------------------------------------------------------------------------//// testStartTag()////------------------------------------------------------------------------------Boolean XmlReader::testStartTag(    XmlParser& parser,    XmlEntry& entry,    const char* tagName){    if (!parser.next(entry) ||        entry.type != XmlEntry::START_TAG ||        strcmp(entry.text, tagName) != 0)    {        parser.putBack(entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// testEndTag()////------------------------------------------------------------------------------Boolean XmlReader::testEndTag(XmlParser& parser, const char* tagName){    XmlEntry entry;    if (!parser.next(entry) ||        entry.type != XmlEntry::END_TAG ||        strcmp(entry.text, tagName) != 0)    {        parser.putBack(entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// testStartTagOrEmptyTag()////------------------------------------------------------------------------------Boolean XmlReader::testStartTagOrEmptyTag(    XmlParser& parser,    XmlEntry& entry,    const char* tagName){    if (!parser.next(entry) ||       (entry.type != XmlEntry::START_TAG &&        entry.type != XmlEntry::EMPTY_TAG) ||        strcmp(entry.text, tagName) != 0)    {        parser.putBack(entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// testStartTagOrEmptyTag()////------------------------------------------------------------------------------Boolean XmlReader::testStartTagOrEmptyTag(    XmlParser& parser,    XmlEntry& entry){    if (!parser.next(entry) ||        (entry.type != XmlEntry::START_TAG &&         entry.type != XmlEntry::EMPTY_TAG))    {        parser.putBack(entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// testContentOrCData()////------------------------------------------------------------------------------Boolean XmlReader::testContentOrCData(    XmlParser& parser,    XmlEntry& entry){    if (!parser.next(entry) ||        (entry.type != XmlEntry::CONTENT &&        entry.type != XmlEntry::CDATA))    {        parser.putBack(entry);        return false;    }    return true;}//------------------------------------------------------------------------------//// getCimStartTag()////     <!ELEMENT CIM (MESSAGE|DECLARATION)>//     <!ATTRLIST CIM//         CIMVERSION CDATA #REQUIRED//         DTDVERSION CDATA #REQUIRED>////------------------------------------------------------------------------------void XmlReader::getCimStartTag(    XmlParser& parser,    const char*& cimVersion,    const char*& dtdVersion){    XmlEntry entry;    XmlReader::expectStartTag(parser, entry, "CIM");    if (!entry.getAttributeValue("CIMVERSION", cimVersion))    {        MessageLoaderParms mlParms(            "Common.XmlReader.MISSING_CIMVERSION_ATTRIBUTE",            "missing CIM.CIMVERSION attribute");        throw XmlValidationError(parser.getLine(), mlParms);    }    if (!entry.getAttributeValue("DTDVERSION", dtdVersion))    {        MessageLoaderParms mlParms(            "Common.XmlReader.MISSING_DTDVERSION_ATTRIBUTE",            "missing CIM.DTDVERSION attribute");        throw XmlValidationError(parser.getLine(), mlParms);    }}//------------------------------------------------------------------------------//// getCimNameAttribute()////     <!ENTITY % CIMName "NAME CDATA #REQUIRED">////------------------------------------------------------------------------------CIMName XmlReader::getCimNameAttribute(    Uint32 lineNumber,    const XmlEntry& entry,    const char* elementName,    Boolean acceptNull){    String name;    if (!entry.getAttributeValue("NAME", name))    {        char buffer[MESSAGE_SIZE];        sprintf(buffer, "%s.NAME", elementName);        MessageLoaderParms mlParms(            "Common.XmlReader.MISSING_ATTRIBUTE",            "missing $0 attribute",            buffer);        throw XmlValidationError(lineNumber, mlParms);    }    if (acceptNull && name.size() == 0)        return CIMName ();    if (!CIMName::legal(name))    {#ifdef PEGASUS_SNIA_INTEROP_TEST    // In testing, replace illegal CIMName with this value to avoid the    // exception and let xml parsing continue.  THIS IS TEMP.    name = "BADNAMESUBSTITUTEDBYPEGASUSCLIENT";#else    char buffer[MESSAGE_SIZE];    sprintf(buffer, "%s.NAME", elementName);    MessageLoaderParms mlParms(        "Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",        "Illegal value for $0 attribute",        buffer);    throw XmlSemanticError(lineNumber, mlParms);#endif    }    return CIMNameUnchecked(name);}//------------------------------------------------------------------------------//// getClassNameAttribute()////     <!ENTITY % CIMName "CLASSNAME CDATA #REQUIRED">////------------------------------------------------------------------------------String XmlReader::getClassNameAttribute(    Uint32 lineNumber,    const XmlEntry& entry,    const char* elementName){    String name;    if (!entry.getAttributeValue("CLASSNAME", name))    {        char buffer[MESSAGE_SIZE];        sprintf(buffer, "%s.CLASSNAME", elementName);        MessageLoaderParms mlParms(            "Common.XmlReader.MISSING_ATTRIBUTE",            "missing $0 attribute",            buffer);        throw XmlValidationError(lineNumber, mlParms);    }    if (!CIMName::legal(name))    {        char buffer[MESSAGE_SIZE];        sprintf(buffer, "%s.CLASSNAME", elementName);        MessageLoaderParms mlParms(            "Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",            "Illegal value for $0 attribute",            buffer);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -