Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : XML Parser Functions : xml_parser_set_option

xml_parser_set_option

Set options in an XML parser (PHP 4, PHP 5)
bool xml_parser_set_option ( resource parser, int option, mixed value )

Sets an option in an XML parser.

Parameters

parser

A reference to the XML parser to set an option in.

option

Which option to set. See below.

The following options are available:

Table 337. XML parser options

Option constant Data type Description
XML_OPTION_CASE_FOLDING integer Controls whether case-folding is enabled for this XML parser. Enabled by default.
XML_OPTION_SKIP_TAGSTART integer Specify how many characters should be skipped in the beginning of a tag name.
XML_OPTION_SKIP_WHITE integer Whether to skip values consisting of whitespace characters.
XML_OPTION_TARGET_ENCODING string Sets which target encoding to use in this XML parser.By default, it is set to the same as the source encoding used by xml_parser_create(). Supported target encodings are ISO-8859-1, US-ASCII and UTF-8.


value

The option's new value.

Return Values

This function returns FALSE if parser does not refer to a valid parser, or if the option could not be set. Else the option is set and TRUE is returned.

Examples ( Source code ) » xml_parser_set_option

<?php
 $parser 
xml_parser_create();
xml_parser_set_option$parserXML_OPTION_CASE_FOLDING);
xml_parser_set_option$parserXML_OPTION_SKIP_WHITE);
xml_parse_into_struct$parserfile_get_contents($file), $tags );
xml_parser_free$parser );
?>

Related Examples ( Source code ) » xml_parser_set_option





Code Examples / Notes » xml_parser_set_option

ta

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


gregoire dot hubert

XML_OPTION_SKIP_WHITE =1 allows the parser to skip "space" characters in xml document (default is 0)

pupeno

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.


chris

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


matt

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


j no_spam_please

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'];


maschoen

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.


anony

Disable case folding or your code will be violating the XML 1.0 specification.

06-sep-2006 03: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];
}


Change Language


Follow Navioo On Twitter
utf8_decode
utf8_encode
xml_error_string
xml_get_current_byte_index
xml_get_current_column_number
xml_get_current_line_number
xml_get_error_code
xml_parse_into_struct
xml_parse
xml_parser_create_ns
xml_parser_create
xml_parser_free
xml_parser_get_option
xml_parser_set_option
xml_set_character_data_handler
xml_set_default_handler
xml_set_element_handler
xml_set_end_namespace_decl_handler
xml_set_external_entity_ref_handler
xml_set_notation_decl_handler
xml_set_object
xml_set_processing_instruction_handler
xml_set_start_namespace_decl_handler
xml_set_unparsed_entity_decl_handler
eXTReMe Tracker