xml_parser_set_option

(PHP 3 >= 3.0.6, PHP 4, PHP 5)

xml_parser_set_option -- 为指定 XML 解析进行选项设置

说明

bool xml_parser_set_option ( resource parser, int option, mixed value )

parser

指向要设置选项信息的 XML 解析器的指针。

option

要设置的选项名称。请参考下文。

value

要给选项设置的新值。

如果 parser 参数没有指向一个合法的解析器或者指定的选项无法设置,该函数将返回 FALSE,否则将会把选项设置为指定的值并返回 TRUE

可被设置的选项如下:

表格 1. XML 解析器选项

选项常量数据类型描述
XML_OPTION_CASE_FOLDINGinteger 控制在该 XML 解析器中 大小写折叠(case-folding) 是否有效。其默认值为有效。
XML_OPTION_SKIP_TAGSTARTinteger 指明在一个标记名前应略过几个字符。
XML_OPTION_SKIP_WHITEinteger 是否略过由白空字符组成的值。
XML_OPTION_TARGET_ENCODINGstring 设置该 XML 解析器所使用的目标编码(target encoding)方式。其默认值和由 xml_parser_create() 函数设置的源编码(source encoding)方式相同。支持的目标编码方式有 ISO-8859-1US-ASCIIUTF-8


add a note add a note User Contributed Notes
06-Sep-2006 10: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 09: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 05: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 07: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 10: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
gregoire dot hubert at fr dot alcove dot com
24-Mar-2001 01:05
XML_OPTION_SKIP_WHITE =1 allows the parser to skip "space" characters in xml document (default is 0)
anony at mous dot com
20-Apr-2000 08:26
Disable case folding or your code will be violating the XML 1.0 specification.