php 参数 xml,PHP 为指定 XML 解析进行选项设置

用户评论:

www.thomaskoch.it (2008-07-31 02:22:49)

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:

{

if(!trim($cdata))

return;// ... continue processing ...}?>

maschoen at pobox dot com (2007-10-11 12:19:08)

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 (2007-03-08 20:08:43)

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

(2006-09-06 07:56:12)

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 (2005-03-28 13:25:00)

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.

$url="https://example.com";$page="/proccessing_page.cgi";$post_string="All XML stuff Here";$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)) {

printcurl_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 (2002-12-16 05:56:55)

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 (2002-11-16 01:14:56)

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 (2002-07-09 04:52:15)

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 (2001-10-21 19:32:23)

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 (2000-04-20 05:26:02)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值