peiyongz    2004/09/14 14:54:47

  Modified:    c/samples/PSVIWriter PSVIWriterHandlers.hpp
                        PSVIWriterHandlers.cpp
  Log:
  to get actual value outof PSVIItem (Element,Attribute)
  
  Revision  Changes    Path
  1.5       +5 -2      xml-xerces/c/samples/PSVIWriter/PSVIWriterHandlers.hpp
  
  Index: PSVIWriterHandlers.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/PSVIWriter/PSVIWriterHandlers.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- PSVIWriterHandlers.hpp    8 Sep 2004 13:55:32 -0000       1.4
  +++ PSVIWriterHandlers.hpp    14 Sep 2004 21:54:47 -0000      1.5
  @@ -156,7 +156,9 @@
       void processNamespaceAttributes(PSVIAttributeList* psviAttributes, const 
RefVectorOf<AttrInfo>* attributes);
       void processAttributePSVI(PSVIAttribute* attribute);
       void processInScopeNamespaces();
  -   
  +    void processActualValue(PSVIItem*);
  +    void formDateTime(XSValue*);
  +
       void processSchemaInformation(XSModel* model);
       void processNamespaceItem(XSNamespaceItem* namespaceItem);
       void processSchemaComponents(XSNamespaceItem* namespaceItem);
  @@ -223,7 +225,8 @@
        void writeValue(const XMLCh* const elementName, const StringList* const 
values);
        void writeEmpty(const XMLCh* const elementName, const StringList* const attrs);
        void writeEmpty(const XMLCh* const elementName);
  -    
  +    void writeString(const XMLCh* const string);
  +
       const XMLCh* translateScope(XSConstants::SCOPE scope);
       const XMLCh* translateValueConstraint(XSConstants::VALUE_CONSTRAINT 
constraintKind);
       const XMLCh* translateBlockOrFinal(short val);
  
  
  
  1.9       +314 -1    xml-xerces/c/samples/PSVIWriter/PSVIWriterHandlers.cpp
  
  Index: PSVIWriterHandlers.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/PSVIWriter/PSVIWriterHandlers.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- PSVIWriterHandlers.cpp    8 Sep 2004 13:55:32 -0000       1.8
  +++ PSVIWriterHandlers.cpp    14 Sep 2004 21:54:47 -0000      1.9
  @@ -31,7 +31,10 @@
   #include <xercesc/dom/DOMTypeInfo.hpp>
   #include <xercesc/dom/DOMImplementationRegistry.hpp>
   #include <xercesc/dom/DOMImplementation.hpp>
  +#include <xercesc/framework/psvi/XSValue.hpp>
  +
   #include <string.h>
  +#include <stdio.h>
   
   XERCES_CPP_NAMESPACE_USE
   
  @@ -74,7 +77,16 @@
   static const XMLCh gSlashAngleFeed[] = { chForwardSlash, chCloseAngle, chLF, chNull 
};
   static const XMLCh gQuoteAngleFeed[] = { chDoubleQuote, chCloseAngle, chLF, chNull 
};
   
  -
  +static const XMLCh gActualValue[] = { chLatin_a, chLatin_c, chLatin_t, chLatin_u, 
chLatin_a,
  +                                      chLatin_l, chLatin_V, chLatin_a, chLatin_l, 
chLatin_u,
  +                                      chLatin_e, chNull };
  +
  +static const XMLCh gDataType[] = { chLatin_d, chLatin_a, chLatin_t, chLatin_a, 
chLatin_T,
  +                                   chLatin_y, chLatin_p, chLatin_e, chNull };
  +static const XMLCh gDataValue[] = { chLatin_d, chLatin_a, chLatin_t, chLatin_a, 
chLatin_V,
  +                                   chLatin_a, chLatin_l,  chLatin_u, chLatin_e, 
chNull };
  +static const XMLCh gCommentStart[] = { chOpenAngle, chBang, chDash, chDash, chLF, 
chNull};
  +static const XMLCh gCommentEnd[] = { chDash, chDash, chCloseAngle, chLF, chNull};
   // ---------------------------------------------------------------------------
   //  PSVIWriterHandlers: Constructors and Destructor
   // ---------------------------------------------------------------------------
  @@ -341,6 +353,8 @@
   void PSVIWriterHandlers::handleElementPSVI(  const XMLCh* const localName, 
                                                                                       
 const XMLCh* const uri,
                                                                                       
 PSVIElement* elementInfo ) {
  +
  +    processActualValue(elementInfo);
        processChildrenEnd();
        processSchemaInformation(elementInfo->getSchemaInformation());
        sendElementValue( PSVIUni::fgValidationAttempted,
  @@ -362,6 +376,7 @@
        sendElementEmpty(PSVIUni::fgIdIdrefTable);
        sendElementEmpty(PSVIUni::fgIdentityConstraintTable);
        sendUnindentedElement(PSVIUni::fgElement);
  +
   }
   
   // ---------------------------------------------------------------------------
  @@ -454,6 +469,8 @@
                processTypeDefinitionRef(PSVIUni::fgTypeDefinition, 
attrPSVI->getTypeDefinition());
                processTypeDefinitionOrRef(PSVIUni::fgMemberTypeDefinition, 
attrPSVI->getMemberTypeDefinition());
                processAttributeDeclarationRef(PSVIUni::fgDeclaration, 
attrPSVI->getAttributeDeclaration());
  +
  +        processActualValue(attrPSVI);
        }
   }
   
  @@ -1241,6 +1258,11 @@
                << XMLFormatter::NoEscapes << fIndentChars << chOpenAngle << 
elementName << gSlashAngleFeed ;
   }
   
  +void PSVIWriterHandlers::writeString(const XMLCh* const string) {
  +     *fFormatter 
  +             << XMLFormatter::NoEscapes << fIndentChars << string;
  +}
  +
   const XMLCh* PSVIWriterHandlers::translateScope(XSConstants::SCOPE scope) {
        switch (scope) {
                case XSConstants::SCOPE_ABSENT :
  @@ -1551,3 +1573,294 @@
        fIndent--;
   }
   
  +/***
  + *    yyyy-mm-ddThh:mm:ss.sssss
  + ***/
  +void PSVIWriterHandlers::formDateTime(XSValue* obj)
  +{
  +    
  +    char buffer[1024];
  +    memset(buffer, 0, sizeof buffer);
  +    sprintf(buffer, "%d-%d-%dT%d:%d:%f", obj->fData.fValue.f_datetime.f_year
  +                                       , obj->fData.fValue.f_datetime.f_month
  +                                       , obj->fData.fValue.f_datetime.f_day
  +                                       , obj->fData.fValue.f_datetime.f_hour
  +                                       , obj->fData.fValue.f_datetime.f_min
  +                                       , obj->fData.fValue.f_datetime.f_second 
  +                                       + obj->fData.fValue.f_datetime.f_milisec);
  +
  +    XMLCh *value = XMLString::transcode(buffer);
  +    ArrayJanitor<XMLCh> jan(value);
  +    writeValue(gDataValue, value);
  +}
  +
  +/***
  + *  <actualValue>
  + *       <dataType>unsignedShort</dataType>
  + *        <dataValue>0</dataValue>
  + *   </actualValue>
  + ***/
  +void  PSVIWriterHandlers::processActualValue(PSVIItem* item)
  +{
  +    if (!item) return;
  +
  +    XSValue* obj = item->getActualValue();
  +
  +    if (obj)
  +    {
  +        char buffer[1024];
  +
  +        writeString(gCommentStart);
  +        incIndent();
  +        writeOpen(gActualValue);
  +        incIndent();
  +
  +        switch (obj->fData.f_datatype)
  +        { 
  +        case XSValue::dt_boolean:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_BOOLEAN);
  +                writeValue(gDataValue, 
XMLUni::fgBooleanValueSpace[obj->fData.fValue.f_bool? 0: 1]);
  +            }
  +            break;
  +        case XSValue::dt_decimal:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DECIMAL);
  +                sprintf( buffer,"%f", obj->fData.fValue.f_decimal.f_dvalue);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_float:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_FLOAT);
  +                sprintf( buffer,"%f", obj->fData.fValue.f_float);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_double:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DOUBLE);
  +                sprintf( buffer,"%f", obj->fData.fValue.f_double);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_duration:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DURATION);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_dateTime:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DATETIME);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_time:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_TIME);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_date:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DATE);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_gYearMonth:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_YEARMONTH);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_gYear:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_YEAR);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_gMonthDay:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_MONTHDAY);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_gDay:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_DAY);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_gMonth:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_MONTH);
  +                formDateTime(obj);
  +            }
  +            break;
  +        case XSValue::dt_hexBinary:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_HEXBINARY);
  +                writeValue(gDataValue, obj->fData.fValue.f_strVal);
  +            }
  +            break;
  +        case XSValue::dt_base64Binary:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_BASE64BINARY);
  +                writeValue(gDataValue, obj->fData.fValue.f_strVal);
  +            }
  +            break;
  +
  +        case XSValue::dt_integer:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_INTEGER);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_nonPositiveInteger:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_NONPOSITIVEINTEGER);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_negativeInteger:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_NEGATIVEINTEGER);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_long:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_LONG);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_int:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_INT);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_int);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_short:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_SHORT);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_short);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_byte:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_BYTE);
  +                sprintf( buffer,"%d", obj->fData.fValue.f_char);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_nonNegativeInteger:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_NONNEGATIVEINTEGER);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_unsignedLong:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_ULONG);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_ulong);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_unsignedInt:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_UINT);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_uint);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_unsignedShort:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_USHORT);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_ushort);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_unsignedByte:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_UBYTE);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_uchar);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_positiveInteger:
  +            {
  +                writeValue(gDataType, SchemaSymbols::fgDT_POSITIVEINTEGER);
  +                sprintf( buffer,"%u", obj->fData.fValue.f_long);
  +                XMLCh *value = XMLString::transcode(buffer);
  +                ArrayJanitor<XMLCh> jan(value);
  +                writeValue(gDataValue, value);
  +            }
  +            break;
  +        case XSValue::dt_string:
  +        case XSValue::dt_anyURI:
  +        case XSValue::dt_QName:
  +        case XSValue::dt_NOTATION:
  +        case XSValue::dt_normalizedString:
  +        case XSValue::dt_token:
  +        case XSValue::dt_language:
  +        case XSValue::dt_NMTOKEN:
  +        case XSValue::dt_NMTOKENS:
  +        case XSValue::dt_Name:
  +        case XSValue::dt_NCName:
  +        case XSValue::dt_ID:
  +        case XSValue::dt_IDREF:
  +        case XSValue::dt_IDREFS:
  +        case XSValue::dt_ENTITY:
  +        case XSValue::dt_ENTITIES:
  +            break; //we shouldn't see them
  +        default:
  +            break;
  +        }
  +
  +        decIndent();
  +        writeClose(gActualValue);
  +        decIndent();
  +        writeString(gCommentEnd);
  +    }
  +
  +    delete obj;
  +
  +}
  \ No newline at end of file
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to