The option XML_OPTION_SKIP_WHITE has no effect in my PHP 5.2.6 (with expat-1.95.8-5). To skip cdata composed of white space only, simply check for that at the beginning of your cdata callback function:
<?php
function callback_cdata($parser, $cdata)
{
if(!trim($cdata))
return;
// ... continue processing ...
}
?>
xml_parser_set_option
(PHP 4, PHP 5)
xml_parser_set_option — Valorizza un'opzione di un parser XML
Descrizione
- parser
- Riferimento al parser XML di cui si vuole valorizzare l'opzione,
- opzione
- Quale opzione valorizzare. Vedere più avanti.
- valore
- Nuovo valore dell'opzione.
Questa funzione restituisce FALSE se parser non si riferisce ad un parser valido, o se l'opzione non può essere valorizzata. Altrimenti l'opzione viene valorizzata e la funzione restituisce TRUE.
Sono disponibili le seguenti opzioni:
| Costante dell'opzione | tipo di dato | Descrizione |
|---|---|---|
| XML_OPTION_CASE_FOLDING | integer | Controlla se il case-folding è abilitato per questo parser XML. Abilitato per default. |
| XML_OPTION_SKIP_TAGSTART | integer | Indica quanti caratteri devono essere ignorati dall'inizio del nome del tag. |
| XML_OPTION_SKIP_WHITE | integer | Indica se contare anche gli spazi nei caratteri da ignorare. |
| XML_OPTION_TARGET_ENCODING | string | Indica quale target encoding utilizzare in questo parser XML. Per default, è valorizzato con la medesima codifica del sorgente utilizzata da xml_parser_create(). Le codifiche supportate per il destinatario sono ISO-8859-1, US-ASCII e UTF-8. |
xml_parser_set_option
www.thomaskoch.it
31-Jul-2008 11:22
31-Jul-2008 11:22
maschoen at pobox dot com
11-Oct-2007 09:19
11-Oct-2007 09:19
I'm a little confused about using xml_parser_set_option and xml_parser_get_option with XML_OPTION_SKIP_WHITE and XML_OPTION_SKIP_TAGSTART.
Looking at the source code, ...set_option() accepts both ...SKIP_WHITE and ...SKIP_TAGSTART, and sets a program variables. On the other hand, ...get_option() returns an error for both. I'm not sure of the code actually uses the variables properly, although it does reference the set variables. This does look like an oversite.
j[no_spam_please] at [thx]jessepearson dot net
09-Mar-2007 05:08
09-Mar-2007 05:08
In the function below, you need to update two lines if you don't want php to throw warnings.
change these two:
$elements[$index]['attributes'] = $tag['attributes'];
$elements[$index]['content'] = $tag['value'];
to this:
$elements[$index]['attributes'] = empty($tag['attributes']) ? "" : $tag['attributes'];
$elements[$index]['content'] = empty($tag['value']) ? "" : $tag['value'];
06-Sep-2006 04:56
A little mod to a function posted here...
function xml_to_array( $file )
{
$parser = xml_parser_create();
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );
xml_parse_into_struct( $parser, file_get_contents($file), $tags );
xml_parser_free( $parser );
$elements = array();
$stack = array();
foreach ( $tags as $tag )
{
$index = count( $elements );
if ( $tag['type'] == "complete" || $tag['type'] == "open" )
{
$elements[$index] = array();
$elements[$index]['name'] = $tag['tag'];
$elements[$index]['attributes'] = $tag['attributes'];
$elements[$index]['content'] = $tag['value'];
if ( $tag['type'] == "open" )
{ # push
$elements[$index]['children'] = array();
$stack[count($stack)] = &$elements;
$elements = &$elements[$index]['children'];
}
}
if ( $tag['type'] == "close" )
{ # pop
$elements = &$stack[count($stack) - 1];
unset($stack[count($stack) - 1]);
}
}
return $elements[0];
}
matt at mcbridematt dot dhs dot org
16-Dec-2002 02:56
16-Dec-2002 02:56
Re: anony at mous dot com
case folding is a violation of the XHTML specification. xhtml is all in lowercase to be inline with the DOM
pupeno at pupeno dot com
16-Nov-2002 10:14
16-Nov-2002 10:14
XML is case sensitive, then, from my point of view, disabling case folding doesn't goes against xml 1.0 specifications but the contrary, disabling case folding allow us to distiguish between diferent cases of the same letter ('a' and 'A') which of XML are two diferent things.
From my point of view, disabling case folding is a good practice and I think it should be disabled by default.
More information on:
http://www.isacat.net/2001/xml/case.htm
and
http://www.w3.org/TR/REC-xml
Thank you.
ta at NOSPAM dot magicsquare dot info
09-Jul-2002 01:52
09-Jul-2002 01:52
XML_OPTION_SKIP_WHITE works for me (linux, php 4.2.1)
phpinfo says :
XML Support active
XML Namespace Support active
EXPAT Version expat_1.95.2
i guess it depends on expat version/presence
chris at wildcharacters dot com
22-Oct-2001 04:32
22-Oct-2001 04:32
The two 'skip' tags are not available to windows users using PHP 4.0.4. The following:
$skipWhite = xml_parser_get_option ($xmlParser,XML_OPTION_SKIP_WHITE);
$skipTagStart = xml_parser_get_option ($xmlParser,XML_OPTION_SKIP_TAGSTART);
generates the following errors:
Warning: xml_parser_get_option: unknown option in c:/program files/abria merlin/apache/htdocs/xml/sax_test.php on line 230
anony at mous dot com
20-Apr-2000 02:26
20-Apr-2000 02:26
Disable case folding or your code will be violating the XML 1.0 specification.
