downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

xml_set_character_data_handler> <xml_parser_get_option
[edit] Last updated: Fri, 23 Mar 2012

view this page in

xml_parser_set_option

(PHP 4, PHP 5)

xml_parser_set_optionXML çözümleyici seçeneklerini belirler

Açıklama

bool xml_parser_set_option ( resource $çözümleyici , int $seçenek , mixed $değer )

XML çözümleyici seçeneklerinden birine değer atar.

Değiştirgeler

çözümleyici

xml_parser_create() ve xml_parser_create_ns() işlevleri tarafından döndürülen bir XML özkaynağı.

seçenek

Değer atanacak seçenek.

Kullanılabilecek seçenekler:

XML çözümleyici seçenekleri
Seçenek sabiti Veri türü Açıklama
XML_OPTION_CASE_FOLDING integer Büyük harfe dönüşüm yapılıp yapılmayacağını belirler. Öntanımlı olarak büyük harfe dönüşüm yapılır.
XML_OPTION_SKIP_TAGSTART integer Bir etiket isminin başlangıcından itibaren kaç karakter atlanacağını belirler.
XML_OPTION_SKIP_WHITE integer Boşluk karakterlerinden oluşan değerlerin atlanıp atlanmayacağı belirtilir.
XML_OPTION_TARGET_ENCODING string XML çözümleyci tarafından kullanılacak hedef kodlamayı belirler. Öntanımlı olarak, xml_parser_create() tarafından kullanılan kaynak kodlamasıyla aynıdır. Desteklenen hedef kodlamalar: ISO-8859-1, US-ASCII ve UTF-8.

değer

Seçeneğin değeri.

Dönen Değerler

çözümleyici olarak geçerli bir çözümleyici belirtilmemişse veya seçenek atanamazsa FALSE, aksi takdirde TRUE döner.



xml_set_character_data_handler> <xml_parser_get_option
[edit] Last updated: Fri, 23 Mar 2012
 
add a note add a note User Contributed Notes xml_parser_set_option
www.thomaskoch.it 30-Jul-2008 08:22
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 ...
}
?>
maschoen at pobox dot com 11-Oct-2007 06: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 08-Mar-2007 01: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 01: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];
}
ksavage at achaean dot com 28-Mar-2005 06:25
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($ch, CURLOPT_URL,$url);
      
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
       
curl_setopt($ch, CURLOPT_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!
matt at mcbridematt dot dhs dot org 15-Dec-2002 10: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 15-Nov-2002 06: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 08-Jul-2002 10: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 21-Oct-2001 01: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 19-Apr-2000 11:26
Disable case folding or your code will be violating the XML 1.0 specification.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites