この C++ コードにはバグがあります。単語間の複数の空白を 1 つのスペースに置き換えます。それがどこにあるのかわかりません。2 つの単語の間の空白を削除して 1 つに置き換えるべきではありません。これは、空白と空白を処理する方法です。
const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding )
{
if ( !p || !*p )
{
return 0;
}
if ( encoding == TIXML_ENCODING_UTF8 )
{
while ( *p )
{
const unsigned char* pU = (const unsigned char*)p;
if ( *(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==TIXML_UTF_LEAD_1
&& *(pU+2)==TIXML_UTF_LEAD_2 )
{
p += 3;
continue;
}
else if(*(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==0xbfU
&& *(pU+2)==0xbeU )
{
p += 3;
continue;
}
else if(*(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==0xbfU
&& *(pU+2)==0xbfU )
{
p += 3;
continue;
}
if ( IsWhiteSpace( *p ) ) // Still using old rules for white space.
p++;
else
break;
}
}
else
{
while ( *p && IsWhiteSpace( *p ) )
// while(*p)
++p;
}
return p;
}
入力:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>
期待される出力:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>
観測された出力:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>