dunno
Новичок
XML Parsing chardata split
Генерируется XML фаил в кодировке cp1257 не мной.
Я его парсирую для ввода в базу в utf8, но "символные данные"(chardata) без причины дробятся(не все!). В итоге получается каша. Есть подозрение, что это как-то связано с кодировками. Долго с этим парюсь, немогу разобраться.
Вообщем код парсера:
Сам xmlfile.xml (encoding cp1257):
<?xml version="1.0" encoding="Windows-1257" ?>
<ProductSpecification>
<Property>
<Name>PRIMĀRĀ VALSTS</Name>
<Value>Universal</Value>
</Property>
<Property>
<Name>GRUPA</Name>
<Value>GARANTIJAS PAPLAŠINĀJUMS</Value>
</Property>
<Property>
<Name>GRUPA</Name>
<Value>GARANTIJAS PAPLAŠINĀJUMS</Value>
</Property>
<Property>
<Name>INSTRUKCIJA VALSTS VALODĀ</Name>
<Value>NĒ</Value>
</Property>
<Property>
<Name>MARĶĒTA PRECE</Name>
<Value>NĒ</Value>
</Property>
</ProductSpecification>
Результат парсера:
NAME : PRIM
NAME : ĀRĀ VALSTS
VALUE : Universal
NAME : GRUPA
VALUE : GARANTIJAS PAPLA
VALUE : ŠINĀJUMS
NAME : GRUPA
VALUE : GARANTIJAS PAPLA
VALUE : ŠINĀJUMS
NAME : INSTRUKCIJA VALSTS VALOD
NAME : Ā
VALUE : N
VALUE : Ē
NAME : MAR
NAME : ĶĒTA PRECE
VALUE : N
VALUE : Ē
за ранее спасибо.
Генерируется XML фаил в кодировке cp1257 не мной.
Я его парсирую для ввода в базу в utf8, но "символные данные"(chardata) без причины дробятся(не все!). В итоге получается каша. Есть подозрение, что это как-то связано с кодировками. Долго с этим парюсь, немогу разобраться.
Вообщем код парсера:
PHP:
function elstart ($parser, $name, $attribs) {
$GLOBALS['tag'] = $name;
}
function chardata ($parser, $data) {
if ($GLOBALS['tag'] == 'NAME') {
echo $GLOBALS['tag'].' : '.$data.'<br>'; }
elseif ($GLOBALS['tag'] == 'VALUE') {
echo $GLOBALS['tag'].' : '.$data.'<br>'; }
}
$xmlfile = 'xmlfile.xml';
$p = xml_parser_create();
mysql_query('SET NAMES utf8');
xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($p, 'elstart', 'elend');
xml_set_character_data_handler($p, 'chardata');
$gnt = fopen($xmlfile, 'r');
while (!feof($gnt)) {
$buf = fgets($gnt);
echo "<table border=\"1\"><tr><td>".nl2br(htmlspecialchars($buf))."</td></tr></table>";
xml_parse($p, $buf);
};
echo '<br><br><a href="'.$xmlfile.'">CHECK XMLFILE</a>';
<?xml version="1.0" encoding="Windows-1257" ?>
<ProductSpecification>
<Property>
<Name>PRIMĀRĀ VALSTS</Name>
<Value>Universal</Value>
</Property>
<Property>
<Name>GRUPA</Name>
<Value>GARANTIJAS PAPLAŠINĀJUMS</Value>
</Property>
<Property>
<Name>GRUPA</Name>
<Value>GARANTIJAS PAPLAŠINĀJUMS</Value>
</Property>
<Property>
<Name>INSTRUKCIJA VALSTS VALODĀ</Name>
<Value>NĒ</Value>
</Property>
<Property>
<Name>MARĶĒTA PRECE</Name>
<Value>NĒ</Value>
</Property>
</ProductSpecification>
Результат парсера:
NAME : PRIM
NAME : ĀRĀ VALSTS
VALUE : Universal
NAME : GRUPA
VALUE : GARANTIJAS PAPLA
VALUE : ŠINĀJUMS
NAME : GRUPA
VALUE : GARANTIJAS PAPLA
VALUE : ŠINĀJUMS
NAME : INSTRUKCIJA VALSTS VALOD
NAME : Ā
VALUE : N
VALUE : Ē
NAME : MAR
NAME : ĶĒTA PRECE
VALUE : N
VALUE : Ē
за ранее спасибо.