xml_parser_set_option

(PHP 4, PHP 5)

xml_parser_set_optionSet options in an XML parser

Description

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:

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.

Коментарии

Disable case folding or your code will be violating the XML 1.0 specification.
2000-04-20 08:26:02
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
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
2001-10-21 22:32:23
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
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
2002-07-09 07:52:15
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
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.
2002-11-16 03:14:56
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
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
2002-12-16 07:56:55
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
Had one heck of a time getting curl to send my XML request.  Tried a lot of different things, FINALLY ended up with this. 

Im making a curl request to paymentech / Orbital 's payment gateway.   Essentially, I took the same header i made for the fsockopen() request, and used it for this curl request. (Hostinc company didnt allow fsockopen().

You'll note that this specific gateway requires a custom content type header.  Thats what gave me the most trouble.  When using the CURLOPT_HTTPHEADER, and CURLOPT_POSTFIELDS together, it doesnt matter, it sends the default post header because of CURLOPT_POSTFIELDS. 

<?php

$url 
"https://example.com";
$page "/proccessing_page.cgi";

$post_string "<YourXML>All XML stuff Here</YourXML>";

       
$header  "POST ".$page." HTTP/1.0 \r\n";
       
$header .= "MIME-Version: 1.0 \r\n";
       
$header .= "Content-type: application/PTI26 \r\n";
       
$header .= "Content-length: ".strlen($post_string)." \r\n";
       
$header .= "Content-transfer-encoding: text \r\n";
       
$header .= "Request-number: 1 \r\n";
       
$header .= "Document-type: Request \r\n";
       
$header .= "Interface-Version: Test 1.4 \r\n";
       
$header .= "Connection: close \r\n\r\n";
       
$header .= $post_string;
       
       
$ch curl_init();
       
curl_setopt($chCURLOPT_URL,$url);
       
curl_setopt($chCURLOPT_RETURNTRANSFER1);
       
curl_setopt($chCURLOPT_TIMEOUT4); 
       
curl_setopt($chCURLOPT_CUSTOMREQUEST$header);

       
$data curl_exec($ch);         if (curl_errno($ch)) {
           print 
curl_error($ch);
        } else {
           
curl_close($ch);
        }

// use XML Parser on $data, and your set!

       
$xml_parser xml_parser_create();
       
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
       
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
       
xml_parse_into_struct($xml_parser$data$vals$index);
       
xml_parser_free($xml_parser);

// $vals = array of XML tags.  Go get em!

?>

Worked like a dream for me.  Enjoy!
2005-03-28 16:25:00
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
Автор:
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];
}
2006-09-06 10:56:12
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
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'];
2007-03-08 22:08:43
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html
Автор:
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 ...
}
?>
2008-07-31 05:22:49
http://php5.kiev.ua/manual/ru/function.xml-parser-set-option.html

    Поддержать сайт на родительском проекте КГБ