本文整理汇总了C++中XNode::Load方法的典型用法代码示例。如果您正苦于以下问题:C++ XNode::Load方法的具体用法?C++ XNode::Load怎么用?C++ XNode::Load使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XNode
的用法示例。
在下文中一共展示了XNode::Load方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Load
// <TAG attr1="value1" attr2='value2' attr3=value3 >
// </TAG>
// or
// <TAG />
// ^- return pointer
//========================================================
// Name : Load
// Desc : load xml plain text
// Param : pszXml - plain xml text
// pi = parser information
// Return : advanced string pointer (error return NULL)
//--------------------------------------------------------
// Coder Date Desc
// bro 2002-10-29
//========================================================
char* XNode::Load( const char* pszXml, PARSEINFO *pi /*= &piDefault*/ )
{
Clear();
char* xml = (char*)pszXml;
// <
xml = strchr( xml, chXMLTagOpen );
if( xml == NULL )
return NULL;
// </
if( xml[1] == chXMLTagPre )
return xml;
/* <!-- */
if( !strncmp(xml+1, "!--", 3) )
{
xml += 4;
/* Find the close tag. */
char *pEnd = strstr( xml, "-->" );
if( pEnd == NULL )
{
if( !pi->error_occur )
{
pi->error_occur = true;
pi->error_pointer = xml;
pi->error_code = PIE_ALONE_NOT_CLOSED;
pi->error_string = "Unterminated comment";
}
return NULL;
}
// Skip -->.
xml = pEnd + 3;
return Load( xml, pi );
}
// XML Node Tag Name Open
xml++;
char* pTagEnd = strpbrk( xml, " \t\r\n/>" );
SetString( xml, pTagEnd, &m_sName );
xml = pTagEnd;
// Generate XML Attributte List
xml = LoadAttributes( xml, pi );
if( xml == NULL )
return NULL;
// alone tag <TAG ... /> or <?TAG ... ?> or <!-- ... -->
// current pointer: ^ ^ ^
if( *xml == chXMLTagPre || *xml == chXMLQuestion || *xml == chXMLDash )
{
xml++;
// skip over 2nd dash
if( *xml == chXMLDash )
xml++;
if( *xml == chXMLTagClose )
{
// well-formed tag
++xml;
// UGLY: We want to ignore all XML meta tags. So, since the Node we
// just loaded is a meta tag, then Load ourself again using the rest
// of the file until we reach a non-meta tag.
if( !m_sName.empty() && (m_sName[0] == chXMLQuestion || m_sName[0] == chXMLExclamation) )
xml = Load( xml, pi );
return xml;
}
else
{
// error: <TAG ... / >
if( !pi->error_occur )
{
pi->error_occur = true;
pi->error_pointer = xml;
pi->error_code = PIE_ALONE_NOT_CLOSED;
pi->error_string = ("Element must be closed.");
//.........这里部分代码省略.........
示例2: Load
// <TAG attr1="value1" attr2='value2' attr3=value3 >
// </TAG>
// or
// <TAG />
// ^- return pointer
//========================================================
// Name : Load
// Desc : load xml plain text
// Param : pszXml - plain xml text
// pi = parser information
// Return : advanced string pointer (error return NULL)
//--------------------------------------------------------
// Coder Date Desc
// bro 2002-10-29
//========================================================
char* XNode::Load( const char* pszXml, PARSEINFO *pi /*= &piDefault*/ )
{
// Close it
Close();
char* xml = (char*)pszXml;
xml = strchr( xml, chXMLTagOpen );
if( xml == NULL )
return NULL;
// Close Tag
if( *(xml+1) == chXMLTagPre ) // </Close
return xml;
// XML Node Tag Name Open
xml++;
char* pTagEnd = strpbrk( xml, " />" );
SetString( xml, pTagEnd, &name );
xml = pTagEnd;
// Generate XML Attributte List
xml = LoadAttributes( xml, pi );
if( xml == NULL )
return NULL;
// alone tag <TAG ... /> or <?TAG ... ?>
if( *xml == chXMLTagPre || *xml == chXMLTagQuestion )
{
xml++;
if( *xml == chXMLTagClose )
{
// wel-formed tag
++xml;
// UGLY: We want to ignore all XML meta tags. So, since the Node we
// just loaded is a meta tag, then Load ourself again using the rest
// of the file until we reach a non-meta tag.
if( !name.empty() && name[0] == chXMLTagQuestion )
xml = Load( xml, pi );
return xml;
}
else
{
// error: <TAG ... / >
if( !pi->erorr_occur )
{
pi->erorr_occur = true;
pi->error_pointer = xml;
pi->error_code = PIE_ALONE_NOT_CLOSED;
pi->error_string = ("Element must be closed.");
}
// not wel-formed tag
return NULL;
}
}
else
// open/close tag <TAG ..> ... </TAG>
// ^- current pointer
{
// text value╟║ ╬Ью╦╦│EЁж╣╣╥огя╢ы.
//if( this->value.empty() || this->value == ("") )
if( XIsEmptyString( value ) )
{
// Text Value
char* pEnd = tcsechr( ++xml, chXMLTagOpen, chXMLEscape );
if( pEnd == NULL )
{
if( !pi->erorr_occur )
{
pi->erorr_occur = true;
pi->error_pointer = xml;
pi->error_code = PIE_NOT_CLOSED;
pi->error_string = ssprintf( "%s must be closed with </%s>", name.c_str(), name.c_str() );
}
// error cos not exist CloseTag </TAG>
return NULL;
}
bool trim = pi->trim_value;
char escape = pi->escape_value;
//SetString( xml, pEnd, &value, trim, chXMLEscape );
SetString( xml, pEnd, &value, trim, escape );
xml = pEnd;
//.........这里部分代码省略.........