Вы не зарегистрированы? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
Вы должны авторизироваться, чтобы добавить сообщение.
|
|
|
Последние активные темы форума |
|
xslt_set_sax_handlers
(PHP 4 >= 4.0.6) xslt_set_sax_handlers --
Set the SAX handlers to be called when the XML document gets processed
Descriptionvoid xslt_set_sax_handlers ( resource processor, array handlers ) xslt_set_sax_handlers() registers the SAX
handlers for the document, given a XSLT
processor resource.
handlers should be an array in the following format:
Where the functions follow the syntax described for the scheme handler
functions.
Замечание:
The given array does not need to contain all of the different sax
handler elements (although it can), but it only needs to conform to
"handler" => "function" format described above.
Each of the individual SAX handler functions are in the format below:
start_doc ( resource processor )
end_doc ( resource processor )
start_element ( resource processor, string name, array attributes )
end_element ( resource processor, string name )
start_namespace ( resource processor, string prefix, string uri )
end_namespace ( resource processor, string prefix )
comment ( resource processor, string contents )
pi ( resource processor, string target, string contents )
characters ( resource processor, string contents )
Using xslt_set_sax_handlers() doesn't look very different than
running a SAX parser like xml_parse() on the result of an
xslt_process() transformation.
Примеры
Пример 1. xslt_set_sax_handlers() Example
<?php
// From ohlesbeauxjours at yahoo dot fr
// Here's a simple example that applies strtoupper() on
// the content of every <auteur> tag and then displays the
// resulting XML tree:
$xml
=
'<?xml version="1.0"?>
<books>
<book>
<title>Mme Bovary</title>
<author>Gustave Flaubert</author>
</book>
<book>
<title>Mrs Dalloway</title>
<author>Virginia Woolf</author>
</book>
</books>'
;
$xsl
=
'<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:for-each select="books/book">
<livre>
<auteur><xsl:value-of select="author/text()"/></auteur>
</livre>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>'
;
// Handlers :
function
start_document
()
{
// start reading the document
}
function
end_document
()
{
// end reading the document
}
function
start_element
(
$parser
,
$name
,
$attributes
)
{
global
$result
,
$tag
;
$result
.=
"<"
.
$name
.
">"
;
$tag
=
$name
;
}
function
end_element
(
$parser
,
$name
)
{
global
$result
;
$result
.=
"</"
.
$name
.
">"
;
}
function
characters
(
$parser
,
$data
)
{
global
$result
,
$tag
;
if (
$tag
==
"auteur"
) {
$data
=
strtoupper
(
$data
);
}
$result
.=
$data
;
}
// Transformation :
$xh
=
xslt_create
();
$handlers
= array(
"document"
=> array(
"start_document"
,
"end_document"
),
"element"
=> array(
"start_element"
,
"end_element"
),
"character"
=>
"characters"
);
xslt_set_sax_handlers
(
$xh
,
$handlers
);
xslt_process
(
$xh
,
'arg:/_xml'
,
'arg:/_xsl'
,
NULL
, array(
"/_xml"
=>
$xml
,
"/_xsl"
=>
$xsl
));
xslt_free
(
$xh
);
?>
|
|
You can also use xslt_set_object() if you want to
implement your handlers in an object.
Пример 2. Object oriented handler
<?php
// This is the object oriented version of the previous example
class
data_sax_handler
{
var
$buffer
,
$tag
,
$attrs
;
var
$_xh
;
function
data_sax_handler
(
$xml
,
$xsl
)
{
// our xslt resource
$this
->
_xh
=
xslt_create
();
xslt_set_object
(
$this
->
_xs
,
$this
);
// configure sax handlers
$handlers
= array(
"document"
=> array(
'start_document'
,
'end_document'
),
"element"
=> array(
'start_element'
,
'end_element'
),
"character"
=>
'characters'
);
xslt_set_sax_handlers
(
$this
->
_xh
,
$handlers
);
xslt_process
(
$this
->
_xh
,
'arg:/_xml'
,
'arg:/_xsl'
,
NULL
, array(
"/_xml"
=>
$xml
,
"/_xsl"
=>
$xsl
));
xslt_free
(
$this
->
_xh
);
}
function
start_document
()
{
// start reading the document
}
function
end_document
() {
// complete reading the document
}
function
start_element
(
$parser
,
$name
,
$attributes
) {
$this
->
tag
=
$name
;
$this
->
buffer
.=
"<"
.
$name
.
">"
;
$this
->
attrs
=
$attributes
;
}
function
end_element
(
$parser
,
$name
)
{
$this
->
tag
=
''
;
$this
->
buffer
.=
"</"
.
$name
.
">"
;
}
function
characters
(
$parser
,
$data
)
{
if (
$this
->
tag
==
'auteur'
) {
$data
=
strtoupper
(
$data
);
}
$this
->
buffer
.=
$data
;
}
function
get_buffer
() {
return
$this
->
buffer
;
}
}
$exec
= new
data_sax_handler
(
$xml
,
$xsl
);
?>
|
Both examples will output:
<livre>
<auteur>GUSTAVE FLAUBERT</auteur>
</livre>
<livre>
<auteur>VIRGINIA WOOLF</auteur>
</livre> |
|
|
· Гостей: 1
· Пользователей: 0
· Всего пользователей: 453
· Новый пользователь: ZDA
|
|