XML с кодами html

cascas

Новичок
XML с кодами html

Прошу прощения:

В XML есть строки содержащие символы html языка (&/amp;)

<name>Привет1 &/amp; привет2</name>

когда идет разбор этой строки то строка между <name></name> отображается в браузере как:

Привет1
&
привет2


как сделать что бы она отображалась как

Привет1 & привет2
 

cascas

Новичок
тобишь когда прога по разбору XML натыкается на &\amp; (например) то она понимается это как начало новой строки.

Как этого избежать?
 

worm

Новичок
уверен что у тебя не в верстке проблема? а если другой символ поставить?
 

cascas

Новичок
Ты имеешь в виду вместо &\amp; подставить #\amp; например?

Сегодня попробую
 

cascas

Новичок
Автор оригинала: worm
нет, вместо &amp;amp; подставить например &amp;#151;
после этих перестановок получается вместо & подставляется --(длинная черта)

давай код проги приведу?
 

cascas

Новичок
Приветно вот так:
если нужна могу полный файл с кодом и файл xml выслать на почту

PHP:
$file="aaa.xml";
function startElement($parser, $name, $attribs){
	switch ($name){
		case "name":
	break;
	}
}
function endElement ($parser, $name){
	global $currentTag;

	switch ($name){
		default:
			break;
	}

	$currentTag="";
	$currentAttribs="";
}
function characterData ($parser, $data){
	switch ($currentTag){
		case "name":
			$name_b=$data;
			echo ("$name_b<br>");
		break;
		default:
		break;
	}
}

$xmlParser=xml_parser_create();
$caseFold=xml_parser_get_option($xmlParser, XML_OPTION_CASE_FOLDING);
$targetEncoding=xml_parser_get_option($xmlParser, XML_OPTION_TARGET_ENCODING);

if ($caseFold==1){
	xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, false);
}

xml_set_element_handler($xmlParser, "startElement", "endElement");
xml_set_character_data_handler($xmlParser, "characterData");

if (!($fp = fopen($file, "r"))) {
	die("could not open XML input: $file");
}

while ($data = fread($fp, 8192)) {   // 4096
	if (!xml_parse($xmlParser, $data, feof($fp))){
		die("XML error");
		xml_parser_free($xmlParser);
	}
}

xml_parser_free($xmlParser);
 

worm

Новичок
Автор оригинала: cascas

PHP:
function characterData ($parser, $data){
	switch ($currentTag){
		case "name":
			$name_b=$data;
			echo ("$name_b<br>");
		break;
		default:
		break;
	}
}
Сам же бр приписАл...

Вставь в код:
PHP:
xml_parser_set_option($xmlParser, XML_OPTION_SKIP_WHITE , 1)
 

cascas

Новичок
этот БР нужен и он ни как не может влиять на выражение.

строка: <name>Привет1 &\amp; привет2</name>

потому что он по идее должен поставиться после этой строки а не в серидине её.

xml_parser_set_option($xmlParser, XML_OPTION_SKIP_WHITE , 1)
эта опция что то не очень помогает.
 

bkonst

.. хочется странного?...
А кто обещал, что characterData будет вызываться только один раз для всей строки целиком?
 

worm

Новичок
потому что он по идее должен поставиться после этой строки а не в серидине её.
Видимо твои идеи, и идеи разработчиков расходятся, как в результат, парсер анализирует куски, также заканчивающиеся и на разделительные символы. XML_OPTION_SKIP_WHITE как раз запрещает реагировать на подобные символы, но в твоем случае, похоже, такой параметр менять нельзя, это уже от настроек пхп зависит.

Опа, вот тут я загнался )
 

cascas

Новичок
никто, тогда 2 вопроса:
1. почему она вызывается несколько раза именно когда встречает &\amp; ?
2. как сделать чтобы characterData вызывалась только ОДИН РАЗ???
 

cascas

Новичок
Автор оригинала: worm
Видимо твои идеи, и идеи разработчиков расходятся, как в результат, парсер анализирует куски, также заканчивающиеся и на разделительные символы. XML_OPTION_SKIP_WHITE как раз запрещает реагировать на подобные символы, но в твоем случае, похоже, такой параметр менять нельзя, это уже от настроек пхп зависит.
вроде простой пример может даже самый обычный..... странно все это.

-~{}~ 31.01.06 16:36:

Автор оригинала: bkonst
1. Потому что &\amp; - это entity
2. Никак.
вот это "&\amp;" надо читать БЕЗ "\"

я просто незнаю как подругому можно написать

&\amp; в html языке = &
 

worm

Новичок
Кешируй строку и вставляй бр когда тэг закрывается
 

cascas

Новичок
типо через дополнительную переменную?

или есть специальная функция?
 
Сверху