本文整理汇总了C++中CPLParseXMLString函数的典型用法代码示例。如果您正苦于以下问题:C++ CPLParseXMLString函数的具体用法?C++ CPLParseXMLString怎么用?C++ CPLParseXMLString使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CPLParseXMLString函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WCTSEmitServiceException
CPLXMLNode *WCTSCollectRequest()
{
if( getenv("REQUEST_METHOD") == NULL )
WCTSEmitServiceException( "REQUEST_METHOD not set." );
if( EQUAL(getenv("REQUEST_METHOD"),"GET") )
return WCTSCollectKVPRequest();
/* -------------------------------------------------------------------- */
/* Read the body of the POST message into a buffer. */
/* -------------------------------------------------------------------- */
int nContentLength = 0;
char *pszXML = NULL;
if( getenv("CONTENT_LENGTH") != NULL )
{
nContentLength = atoi(getenv("CONTENT_LENGTH"));
pszXML = (char *) CPLMalloc(nContentLength+1);
if( (int) fread(pszXML, 1, nContentLength, stdin) < nContentLength )
WCTSEmitServiceException( "POST body is short." );
pszXML[nContentLength] = '\0';
}
else
{
int nXMLMax, nXMLLen=0;
nXMLMax = 100;
pszXML = (char *) CPLMalloc(nXMLMax);
while( !feof(stdin) )
{
pszXML[nXMLLen++] = fgetc(stdin);
if( nXMLLen == nXMLMax )
{
nXMLMax = nXMLMax * 2;
pszXML = (char *) CPLRealloc(pszXML, nXMLMax);
}
}
pszXML[nXMLLen] = '\0';
}
/* -------------------------------------------------------------------- */
/* Convert into an XML document. */
/* -------------------------------------------------------------------- */
CPLErrorReset();
CPLXMLNode *psTree = CPLParseXMLString( pszXML );
CPLFree( pszXML );
if( CPLGetLastErrorType() == CE_Failure )
WCTSEmitServiceException( CPLGetLastErrorMsg() );
return psTree;
}
示例2: OGR_G_CreateFromGML
OGRGeometryH OGR_G_CreateFromGML( const char *pszGML )
{
if( pszGML == NULL || strlen(pszGML) == 0 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"GML Geometry is empty in GML2OGRGeometry()." );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Try to parse the XML snippet using the MiniXML API. If this */
/* fails, we assume the minixml api has already posted a CPL */
/* error, and just return NULL. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psGML = CPLParseXMLString( pszGML );
if( psGML == NULL )
return NULL;
/* -------------------------------------------------------------------- */
/* Convert geometry recursively. */
/* -------------------------------------------------------------------- */
OGRGeometry *poGeometry;
poGeometry = GML2OGRGeometry_XMLNode( psGML );
CPLDestroyXMLNode( psGML );
return (OGRGeometryH) poGeometry;
}
示例3: CPLDestroyXMLNode
int OGRFMECacheIndex::Load()
{
/* -------------------------------------------------------------------- */
/* Lock the cache index file if not already locked. */
/* -------------------------------------------------------------------- */
if( hLock == NULL && !Lock() )
return FALSE;
if( psTree != NULL )
{
CPLDestroyXMLNode( psTree );
psTree = NULL;
}
/* -------------------------------------------------------------------- */
/* Open the index file. If we don't get it, we assume it is */
/* because it doesn't exist, and we create a "stub" tree in */
/* memory. */
/* -------------------------------------------------------------------- */
FILE *fpIndex;
int nLength;
char *pszIndexBuffer;
fpIndex = VSIFOpen( GetPath(), "rb" );
if( fpIndex == NULL )
{
psTree = CPLCreateXMLNode( NULL, CXT_Element, "OGRFMECacheIndex" );
return TRUE;
}
/* -------------------------------------------------------------------- */
/* Load the data from the file. */
/* -------------------------------------------------------------------- */
VSIFSeek( fpIndex, 0, SEEK_END );
nLength = VSIFTell( fpIndex );
VSIFSeek( fpIndex, 0, SEEK_SET );
pszIndexBuffer = (char *) CPLMalloc(nLength+1);
if( (int) VSIFRead( pszIndexBuffer, 1, nLength, fpIndex ) != nLength )
{
CPLError( CE_Failure, CPLE_FileIO,
"Read of %d byte index file failed.", nLength );
return FALSE;
}
VSIFClose( fpIndex );
/* -------------------------------------------------------------------- */
/* Parse the result into an inmemory XML tree. */
/* -------------------------------------------------------------------- */
pszIndexBuffer[nLength] = '\0';
psTree = CPLParseXMLString( pszIndexBuffer );
CPLFree( pszIndexBuffer );
return psTree != NULL;
}
示例4: STARTS_WITH
bool netCDFWriterConfiguration::Parse(const char *pszFilename)
{
CPLXMLNode *psRoot =
STARTS_WITH(pszFilename, "<Configuration")
? CPLParseXMLString(pszFilename)
: CPLParseXMLFile(pszFilename);
if( psRoot == NULL )
return false;
CPLXMLTreeCloser oCloser(psRoot);
for( CPLXMLNode *psIter = psRoot->psChild; psIter != NULL;
psIter = psIter->psNext )
{
if( psIter->eType != CXT_Element )
continue;
if( EQUAL(psIter->pszValue, "DatasetCreationOption") )
{
SetNameValue(psIter, m_oDatasetCreationOptions);
}
else if( EQUAL(psIter->pszValue, "LayerCreationOption") )
{
SetNameValue(psIter, m_oLayerCreationOptions);
}
else if( EQUAL(psIter->pszValue, "Attribute") )
{
netCDFWriterConfigAttribute oAtt;
if( oAtt.Parse(psIter) )
m_aoAttributes.push_back(oAtt);
}
else if( EQUAL(psIter->pszValue, "Field") )
{
netCDFWriterConfigField oField;
if( oField.Parse(psIter) )
m_oFields[!oField.m_osName.empty()
? oField.m_osName
: CPLString("__") + oField.m_osNetCDFName] =
oField;
}
else if( EQUAL(psIter->pszValue, "Layer") )
{
netCDFWriterConfigLayer oLayer;
if( oLayer.Parse(psIter) )
m_oLayers[oLayer.m_osName] = oLayer;
}
else
{
CPLDebug("GDAL_netCDF", "Ignoring %s", psIter->pszValue);
}
}
m_bIsValid = true;
return true;
}
示例5: OGR_G_ExportToKML
CPLXMLNode *OGR_G_ExportToKMLTree( OGRGeometryH hGeometry )
{
// TODO - mloskot: If passed geometry is null the pszText is non-null,
// so the condition below is false.
char *pszText = OGR_G_ExportToKML( hGeometry, NULL );
if( pszText == NULL )
return NULL;
CPLXMLNode *psTree = CPLParseXMLString( pszText );
CPLFree( pszText );
return psTree;
}
示例6: GDALGMLJP2GenerateMetadata
CPLXMLNode* GDALGMLJP2GenerateMetadata(
const CPLString& osTemplateFile,
const CPLString& osSourceFile
)
{
GByte* pabyStr = nullptr;
if( !VSIIngestFile( nullptr, osTemplateFile, &pabyStr, nullptr, -1 ) )
return nullptr;
CPLString osTemplate(reinterpret_cast<char *>(pabyStr));
CPLFree(pabyStr);
if( !VSIIngestFile( nullptr, osSourceFile, &pabyStr, nullptr, -1 ) )
return nullptr;
CPLString osSource(reinterpret_cast<char *>(pabyStr));
CPLFree(pabyStr);
xmlDocPtr pDoc = xmlParseDoc(
reinterpret_cast<const xmlChar *>(osSource.c_str()));
if( pDoc == nullptr )
{
CPLError(CE_Failure, CPLE_AppDefined, "Cannot parse %s",
osSourceFile.c_str());
return nullptr;
}
xmlXPathContextPtr pXPathCtx = xmlXPathNewContext(pDoc);
if( pXPathCtx == nullptr )
{
xmlFreeDoc(pDoc);
return nullptr;
}
xmlXPathRegisterFunc(pXPathCtx, reinterpret_cast<const xmlChar *>("if"),
GDALGMLJP2XPathIf);
xmlXPathRegisterFunc(pXPathCtx, reinterpret_cast<const xmlChar *>("uuid"),
GDALGMLJP2XPathUUID);
pXPathCtx->error = GDALGMLJP2XPathErrorHandler;
GDALGMLJP2RegisterNamespaces(pXPathCtx, xmlDocGetRootElement(pDoc));
CPLString osXMLRes = GDALGMLJP2EvalExpr(osTemplate, pXPathCtx, pDoc);
xmlXPathFreeContext(pXPathCtx);
xmlFreeDoc(pDoc);
return CPLParseXMLString(osXMLRes);
}
示例7: OGR_G_ExportToGML
CPLXMLNode *OGR_G_ExportToGMLTree( OGRGeometryH hGeometry )
{
char *pszText;
CPLXMLNode *psTree;
pszText = OGR_G_ExportToGML( hGeometry );
if( pszText == NULL )
return NULL;
psTree = CPLParseXMLString( pszText );
CPLFree( pszText );
return psTree;
}
示例8: main
int main( int argc, char **argv )
{
static char szXML[20000000];
FILE *fp;
if( argc == 1 )
fp = stdin;
else if( argv[1][0] == '-' )
{
printf( "Usage: xmlreformat [filename]\n" );
exit( 0 );
}
else
{
fp = fopen( argv[1], "rt" );
if( fp == NULL )
{
printf( "Failed to open file %s.\n", argv[1] );
exit( 1 );
}
}
int nLen = fread( szXML, 1, sizeof(szXML), fp );
if( nLen >= (int) sizeof(szXML)-2 ) {
fprintf( stderr,
"xmlreformat fixed sized buffer (%d bytes) exceeded.\n",
(int) sizeof(szXML) );
exit(1);
}
if( fp != stdin )
fclose( fp );
szXML[nLen] = '\0';
CPLXMLNode *poTree = CPLParseXMLString( szXML );
if( poTree != NULL )
{
char *pszRawXML = CPLSerializeXMLTree( poTree );
printf( "%s", pszRawXML );
CPLFree( pszRawXML );
CPLDestroyXMLNode( poTree );
}
return 0;
}
示例9: EQUAL
CPLErr VRTSourcedRasterBand::SetMetadata( char **papszNewMD, const char *pszDomain )
{
if( pszDomain != NULL
&& (EQUAL(pszDomain,"new_vrt_sources")
|| EQUAL(pszDomain,"vrt_sources")) )
{
VRTDriver *poDriver = (VRTDriver *) GDALGetDriverByName( "VRT" );
CPLErr eErr;
int i;
if( EQUAL(pszDomain,"vrt_sources") )
{
for( int i = 0; i < nSources; i++ )
delete papoSources[i];
CPLFree( papoSources );
papoSources = NULL;
nSources = 0;
}
for( i = 0; i < CSLCount(papszNewMD); i++ )
{
const char *pszXML = CPLParseNameValue( papszNewMD[i], NULL );
CPLXMLNode *psTree = CPLParseXMLString( pszXML );
VRTSource *poSource;
if( psTree == NULL )
return CE_Failure;
poSource = poDriver->ParseSource( psTree, NULL );
CPLDestroyXMLNode( psTree );
if( poSource != NULL )
{
eErr = AddSource( poSource );
if( eErr != CE_None )
return eErr;
}
else
return CE_Failure;
}
return CE_None;
}
else
return VRTRasterBand::SetMetadata( papszNewMD, pszDomain );
}
示例10: CPLParseXMLString
// ************************************************************
// ParseServerException()
// ************************************************************
void BaseProvider::ParseServerException(CString s)
{
CPLXMLNode* node = CPLParseXMLString(s);
if (node)
{
while (node) {
CPLXMLNode* nodeException = CPLGetXMLNode(node, "ServiceException");
if (nodeException) {
CString msg = CPLGetXMLValue(nodeException, "", "");
CallbackHelper::ErrorMsg(Debug::Format("WMS Server exception (%s): %s", Name, msg));
}
node = node->psNext;
}
CPLDestroyXMLNode(node);
}
}
示例11: ParseKMLGeometry
static OGRGeometry* ParseKMLGeometry(const char* pszKML)
{
CPLXMLNode* psXML = CPLParseXMLString(pszKML);
if (psXML == nullptr)
return nullptr;
if (psXML->eType != CXT_Element)
{
CPLDestroyXMLNode(psXML);
return nullptr;
}
OGRGeometry* poGeom = ParseKMLGeometry(psXML);
CPLDestroyXMLNode(psXML);
return poGeom;
}
示例12: CPLParseXMLString
/**
* \brief Import coordinate system from XML format (GML only currently).
*
* This method is the same as the C function OSRImportFromXML()
* @param pszXML XML string to import
* @return OGRERR_NONE on success or OGRERR_CORRUPT_DATA on failure.
*/
OGRErr OGRSpatialReference::importFromXML(const char *pszXML)
{
CPLXMLNode *psTree;
OGRErr eErr = OGRERR_UNSUPPORTED_SRS;
this->Clear();
/* -------------------------------------------------------------------- */
/* Parse the XML. */
/* -------------------------------------------------------------------- */
psTree = CPLParseXMLString(pszXML);
if (psTree == NULL)
return OGRERR_CORRUPT_DATA;
CPLStripXMLNamespace(psTree, "gml", TRUE);
/* -------------------------------------------------------------------- */
/* Import according to the root node type. We walk through */
/* root elements as there is sometimes prefix stuff like */
/* <?xml>. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psNode = psTree;
for (psNode = psTree; psNode != NULL; psNode = psNode->psNext)
{
if (EQUAL(psNode->pszValue, "GeographicCRS"))
{
eErr = importGeogCSFromXML(this, psNode);
break;
}
else if (EQUAL(psNode->pszValue, "ProjectedCRS"))
{
eErr = importProjCSFromXML(this, psNode);
break;
}
}
CPLDestroyXMLNode(psTree);
return eErr;
}
示例13: main
int main( int argc, char **argv )
{
CPLXMLNode *poTree;
static char szXML[10000000];
FILE *fp;
int nLen;
if( argc == 1 )
fp = stdin;
else if( argv[1][0] == '-' )
{
printf( "Usage: xmlreformat [filename]\n" );
exit( 0 );
}
else
{
fp = fopen( argv[1], "rt" );
if( fp == NULL )
{
printf( "Failed to open file %s.\n", argv[1] );
exit( 1 );
}
}
nLen = fread( szXML, 1, sizeof(szXML), fp );
if( fp != stdin )
fclose( fp );
szXML[nLen] = '\0';
poTree = CPLParseXMLString( szXML );
if( poTree != NULL )
{
char *pszRawXML = CPLSerializeXMLTree( poTree );
printf( "%s", pszRawXML );
CPLFree( pszRawXML );
CPLDestroyXMLNode( poTree );
}
return 0;
}
示例14: GMLParseXMLFile
static
CPLXMLNode* GMLParseXMLFile(const char* pszFilename)
{
if( STARTS_WITH(pszFilename, "http://") ||
STARTS_WITH(pszFilename, "https://") )
{
CPLXMLNode* psRet = NULL;
CPLHTTPResult* psResult = CPLHTTPFetch( pszFilename, NULL );
if( psResult != NULL )
{
if( psResult->pabyData != NULL )
{
psRet = CPLParseXMLString( (const char*) psResult->pabyData );
}
CPLHTTPDestroyResult(psResult);
}
return psRet;
}
else
{
return CPLParseXMLFile(pszFilename);
}
}
示例15: CPLFree
void GDALJP2AbstractDataset::LoadJP2Metadata(GDALOpenInfo* poOpenInfo,
const char* pszOverideFilenameIn)
{
const char* pszOverideFilename = pszOverideFilenameIn;
if( pszOverideFilename == NULL )
pszOverideFilename = poOpenInfo->pszFilename;
/* -------------------------------------------------------------------- */
/* Check for georeferencing information. */
/* -------------------------------------------------------------------- */
GDALJP2Metadata oJP2Geo;
if( (poOpenInfo->fpL != NULL && pszOverideFilenameIn == NULL &&
oJP2Geo.ReadAndParse(poOpenInfo->fpL) ) ||
(!(poOpenInfo->fpL != NULL && pszOverideFilenameIn == NULL) &&
oJP2Geo.ReadAndParse( pszOverideFilename )) )
{
CPLFree(pszProjection);
pszProjection = CPLStrdup(oJP2Geo.pszProjection);
bGeoTransformValid = oJP2Geo.bHaveGeoTransform;
memcpy( adfGeoTransform, oJP2Geo.adfGeoTransform,
sizeof(double) * 6 );
nGCPCount = oJP2Geo.nGCPCount;
pasGCPList =
GDALDuplicateGCPs( oJP2Geo.nGCPCount, oJP2Geo.pasGCPList );
if( oJP2Geo.bPixelIsPoint )
GDALDataset::SetMetadataItem(GDALMD_AREA_OR_POINT, GDALMD_AOP_POINT);
if( oJP2Geo.papszRPCMD )
GDALDataset::SetMetadata( oJP2Geo.papszRPCMD, "RPC" );
}
/* -------------------------------------------------------------------- */
/* Report XML UUID box in a dedicated metadata domain */
/* -------------------------------------------------------------------- */
if (oJP2Geo.pszXMPMetadata)
{
char *apszMDList[2];
apszMDList[0] = (char *) oJP2Geo.pszXMPMetadata;
apszMDList[1] = NULL;
GDALDataset::SetMetadata(apszMDList, "xml:XMP");
}
/* -------------------------------------------------------------------- */
/* Do we have any XML boxes we would like to treat as special */
/* domain metadata? (Note: the GDAL multidomain metadata XML box */
/* has been excluded and is dealt a few lines below. */
/* -------------------------------------------------------------------- */
int iBox;
for( iBox = 0;
oJP2Geo.papszGMLMetadata
&& oJP2Geo.papszGMLMetadata[iBox] != NULL;
iBox++ )
{
char *pszName = NULL;
const char *pszXML =
CPLParseNameValue( oJP2Geo.papszGMLMetadata[iBox],
&pszName );
CPLString osDomain;
char *apszMDList[2];
osDomain.Printf( "xml:%s", pszName );
apszMDList[0] = (char *) pszXML;
apszMDList[1] = NULL;
GDALDataset::SetMetadata( apszMDList, osDomain );
CPLFree( pszName );
}
/* -------------------------------------------------------------------- */
/* Do we have GDAL metadata? */
/* -------------------------------------------------------------------- */
if( oJP2Geo.pszGDALMultiDomainMetadata != NULL )
{
CPLXMLNode* psXMLNode = CPLParseXMLString(oJP2Geo.pszGDALMultiDomainMetadata);
if( psXMLNode )
{
GDALMultiDomainMetadata oLocalMDMD;
oLocalMDMD.XMLInit(psXMLNode, FALSE);
char** papszDomainList = oLocalMDMD.GetDomainList();
char** papszIter = papszDomainList;
GDALDataset::SetMetadata(oLocalMDMD.GetMetadata());
while( papszIter && *papszIter )
{
if( !EQUAL(*papszIter, "") && !EQUAL(*papszIter, "IMAGE_STRUCTURE") )
{
if( GDALDataset::GetMetadata(*papszIter) != NULL )
{
CPLDebug("GDALJP2",
"GDAL metadata overrides metadata in %s domain over metadata read from other boxes",
*papszIter);
}
GDALDataset::SetMetadata(oLocalMDMD.GetMetadata(*papszIter), *papszIter);
}
papszIter ++;
}
CPLDestroyXMLNode(psXMLNode);
}
//.........这里部分代码省略.........