|
użytkowników online: 24
|
OPINIE UŻYTKOWNIKÓW
|
Gratulacje i dzięki! Trafiłem tu przypadkiem poszukując informacji na temat php+mysql. Wiele polskich stron powiela identyczne przykłady, klonuje te same kursy i lekcje... ten serwis okazał sie inny. Zasada "problem - rozwiazanie - wyjaśnienie" zdaje egzamin - zapewnia jasną, jednoznaczną i pewną pomoc w konkretnym przypadku. Porady są warte swojej ceny, przede wszystkim ze względu na przyjazną (także dla początkujących) formę i treść oraz bogate i stale powiększane zasoby. Polecam i pozdrawiam!
Kamil Dmowski
Polski Czerwony Krzyż
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
XXVII. DOM Functions
The DOM extension is the replacement for the
DOM XML extension from PHP 4.
The extension still contains many old functions, but they should no
longer be used. In particular, functions that are not object-oriented
should be avoided.
The extension allows you to operate on an XML document with the DOM API.
By używać tych funkcji, nie trzeba niczego instalować.
Są one częścią jądra PHP.
The API of the module follows the DOM Level 2 standard as closely
as possible. Consequently, the API is fully object-oriented.
It is a good idea to have the DOM standard available when
using this module.
This module defines a number of classes, which are explained in the
following tables. Classes with an equivalent in the DOM standard are
named DOMxxx.
Extends DOMNode.
Tabela 1. | Name | Type | Read-only | Description |
|---|
| name | string | yes | The name of the attribute | | ownerElement | DOMElement | yes | The element which contains the attribute | | schemaTypeInfo | bool | yes | Not implemented yet, always return TRUE | | specified | bool | yes | Not implemented yet, always return TRUE | | value | string | no | The value of the attribute |
Extends DOMNode.
Tabela 2. | Name | Type | Read-only | Description |
|---|
| data | string | no | The contents of the node | | length | int | yes | The length of the contents |
Extends DOMCharacterData.
Extends DOMNode.
Tabela 3. | Name | Type | Read-only | Description |
|---|
| actualEncoding | string | yes | | | config | DOMConfiguration | yes | | | doctype | DOMDocumentType | yes |
The Document Type Declaration associated with this document.
| | documentElement | DOMElement | yes |
This is a convenience attribute that allows direct access to the
child node that is the document element of the document.
| | documentURI | string | no |
The location of the document or NULL if undefined.
| | encoding | string | no | | | formatOutput | bool | no | | | implementation | DOMImplementation | yes |
The DOMImplementation object that handles
this document.
| | preserveWhiteSpace | bool | no | Do not remove redundant white space. Default to TRUE. | | recover | bool | no | | | resolveExternals | bool | no |
Set it to TRUE to load external entities from a doctype
declaration. This is useful for including character entities in
your XML document.
| | standalone | bool | no | | | strictErrorChecking | bool | no | Throws DOMException on errors. Default to TRUE. | | substituteEntities | bool | no | | | validateOnParse | bool | no | Loads and validates against the DTD. Default to FALSE. | | version | string | no | | | xmlEncoding | string | yes |
An attribute specifying, as part of the XML declaration, the
encoding of this document. This is NULL when unspecified or when it
is not known, such as when the Document was created in memory.
| | xmlStandalone | bool | no |
An attribute specifying, as part of the XML declaration, whether
this document is standalone. This is FALSE when unspecified.
| | xmlVersion | string | no |
An attribute specifying, as part of the XML declaration, the
version number of this document. If there is no declaration and if
this document supports the "XML" feature, the value is "1.0".
|
Extends DOMNode
Each DOMDocument has a
doctype attribute whose value is either NULL or a
DOMDocumentType object.
Tabela 4. | Name | Type | Read-only | Description |
|---|
| publicId | string | yes | The public identifier of the external subset. | | systemId | string | yes | The system identifier of the external subset. This may be an
absolute URI or not. | | name | string | yes | The name of DTD; i.e., the name immediately following the
DOCTYPE keyword. | | entities | DOMNamedNodeMap | yes |
A DOMNamedNodeMap containing the general
entities, both external and internal, declared in the DTD.
| | notations | DOMNamedNodeMap | yes |
A DOMNamedNodeMap containing the notations
declared in the DTD.
| | internalSubset | string | yes |
The internal subset as a string, or null if there is none. This is
does not contain the delimiting square brackets.
|
Extends DOMNode.
Tabela 5. | Name | Type | Read-only | Description |
|---|
| schemaTypeInfo | bool | yes | Not implemented yet, always return TRUE | | tagName | string | yes | The element name |
Extends DOMNode
This interface represents a known entity, either parsed or unparsed, in
an XML document.
Tabela 6. | Name | Type | Read-only | Description |
|---|
| publicId | string | yes |
The public identifier associated with the entity if specified, and
NULL otherwise.
| | systemId | string | yes |
The system identifier associated with the entity if specified, and
NULL otherwise. This may be an absolute URI or not.
| | notationName | string | yes |
For unparsed entities, the name of the notation for the entity. For
parsed entities, this is NULL.
| | actualEncoding | string | no |
An attribute specifying the encoding used for this entity at the
time of parsing, when it is an external parsed entity. This is
NULL if it an entity from the internal subset or if it is not
known.
| | encoding | string | yes |
An attribute specifying, as part of the text declaration, the
encoding of this entity, when it is an external parsed entity. This
is NULL otherwise.
| | version | string | yes |
An attribute specifying, as part of the text declaration, the
version number of this entity, when it is an external parsed
entity. This is NULL otherwise.
|
DOM operations raise exceptions under particular circumstances, i.e.,
when an operation is impossible to perform for logical reasons.
See also Rozdział 20.
Tabela 7. | Name | Type | Read-only | Description |
|---|
| code | int | yes | An integer indicating the type of error generated |
The DOMImplementation interface provides a number
of methods for performing operations that are independent of any
particular instance of the document object model.
Tabela 8. | Name | Type | Read-only | Description |
|---|
| nodeName | string | yes | Returns the more accurate name for the current node type | | nodeValue | string | no | The value of this node, depending on its type. | | nodeType | int | yes | Gets the type of the node. One of the predefined XML_xxx_NODE constants | | parentNode | DOMNode | yes | The parent of this node. | | childNodes | DOMNodeList | yes |
A DOMNodeList that contains all children of
this node. If there are no children, this is an empty
DOMNodeList.
| | firstChild | DOMNode | yes |
The first child of this node. If there is no such node, this
returns NULL.
| | lastChild | DOMNode | yes |
The last child of this node. If there is no such node, this returns
NULL.
| | previousSibling | DOMNode | yes |
The node immediately preceding this node. If there is no such node,
this returns NULL.
| | nextSibling | DOMNode | yes |
The node immediately following this node. If there is no such node,
this returns NULL.
| | attributes | DOMNamedNodeMap | yes |
A DOMNamedNodeMap containing the attributes
of this node (if it is a DOMElement) or
NULL otherwise.
| | ownerDocument | DOMDocument | yes |
The DOMDocument object associated with this
node.
| | namespaceURI | string | yes |
The namespace URI of this node, or NULL if it is unspecified.
| | prefix | string | no |
The namespace prefix of this node, or NULL if it is unspecified.
| | localName | string | yes |
Returns the local part of the qualified name of this node.
| | baseURI | string | yes |
The absolute base URI of this node or NULL if the implementation
wasn't able to obtain an absolute URI.
| | textContent | string | no |
This attribute returns the text content of this node and its
descendants.
|
Tabela 9. | Name | Type | Read-only | Description |
|---|
| length | int | yes |
The number of nodes in the list. The range of valid child node
indices is 0 to length - 1 inclusive.
|
Extends DOMNode
Tabela 10. | Name | Type | Read-only | Description |
|---|
| publicId | string | yes | | | systemId | string | yes | |
Extends DOMNode.
Tabela 11. | Name | Type | Read-only | Description |
|---|
| target | string | yes | | | data | string | no | |
Extends DOMCharacterData.
Tabela 12. | Name | Type | Read-only | Description |
|---|
| wholeText | string | yes | |
Tabela 13. | Name | Type | Read-only | Description |
|---|
| document | DOMDocument | | |
Many examples in this reference require an XML file. We will use the
book.xml that contains the following:
Przykład 1. chapter.xml <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
]>
<book id="listing">
<title>My lists</title>
<chapter id="books">
<title>My books</title>
<para>
<informaltable>
<tgroup cols="4">
<thead>
<row>
<entry>Title</entry>
<entry>Author</entry>
<entry>Language</entry>
<entry>ISBN</entry>
</row>
</thead>
<tbody>
<row>
<entry>The Grapes of Wrath</entry>
<entry>John Steinbeck</entry>
<entry>en</entry>
<entry>0140186409</entry>
</row>
<row>
<entry>The Pearl</entry>
<entry>John Steinbeck</entry>
<entry>en</entry>
<entry>014017737X</entry>
</row>
<row>
<entry>Samarcande</entry>
<entry>Amine Maalouf</entry>
<entry>fr</entry>
<entry>2253051209</entry>
</row>
<!-- TODO: I have a lot of remaining books to add.. -->
</tbody>
</tgroup>
</informaltable>
</para>
</chapter>
</book> |
|
Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy
rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.
Tabela 14. XML constants | Constant | Value | Description |
|---|
|
XML_ELEMENT_NODE
(integer)
| 1 | Node is a DOMElement | |
XML_ATTRIBUTE_NODE
(integer)
| 2 | Node is a DOMAttr | |
XML_TEXT_NODE
(integer)
| 3 | Node is a DOMText | |
XML_CDATA_SECTION_NODE
(integer)
| 4 | Node is a DOMCharacterData | |
XML_ENTITY_REF_NODE
(integer)
| 5 | Node is a DOMEntityReference | |
XML_ENTITY_NODE
(integer)
| 6 | Node is a DOMEntity | |
XML_PI_NODE
(integer)
| 7 | Node is a DOMProcessingInstruction | |
XML_COMMENT_NODE
(integer)
| 8 | Node is a DOMComment | |
XML_DOCUMENT_NODE
(integer)
| 9 | Node is a DOMDocument | |
XML_DOCUMENT_TYPE_NODE
(integer)
| 10 | Node is a DOMDocumentType | |
XML_DOCUMENT_FRAG_NODE
(integer)
| 11 | Node is a DOMDocumentFragment | |
XML_NOTATION_NODE
(integer)
| 12 | Node is a DOMNotation | |
XML_HTML_DOCUMENT_NODE
(integer)
| 13 | | |
XML_DTD_NODE
(integer)
| 14 | | |
XML_ELEMENT_DECL_NODE
(integer)
| 15 | | |
XML_ATTRIBUTE_DECL_NODE
(integer)
| 16 | | |
XML_ENTITY_DECL_NODE
(integer)
| 17 | | |
XML_NAMESPACE_DECL_NODE
(integer)
| 18 | | |
XML_ATTRIBUTE_CDATA
(integer)
| 1 | | |
XML_ATTRIBUTE_ID
(integer)
| 2 | | |
XML_ATTRIBUTE_IDREF
(integer)
| 3 | | |
XML_ATTRIBUTE_IDREFS
(integer)
| 4 | | |
XML_ATTRIBUTE_ENTITY
(integer)
| 5 | | |
XML_ATTRIBUTE_NMTOKEN
(integer)
| 7 | | |
XML_ATTRIBUTE_NMTOKENS
(integer)
| 8 | | |
XML_ATTRIBUTE_ENUMERATION
(integer)
| 9 | | |
XML_ATTRIBUTE_NOTATION
(integer)
| 10 | |
Tabela 15. DOMException constants | Constant | Value | Description |
|---|
|
DOM_INDEX_SIZE_ERR
(integer)
| 1 |
If index or size is negative, or greater than the allowed value.
| |
DOMSTRING_SIZE_ERR
(integer)
| 2 |
If the specified range of text does not fit into a
DOMString.
| |
DOM_HIERARCHY_REQUEST_ERR
(integer)
| 3 | If any node is inserted somewhere it doesn't belong | |
DOM_WRONG_DOCUMENT_ERR
(integer)
| 4 |
If a node is used in a different document than the one that created it.
| |
DOM_INVALID_CHARACTER_ERR
(integer)
| 5 |
If an invalid or illegal character is specified, such as in a name.
| |
DOM_NO_DATA_ALLOWED_ERR
(integer)
| 6 |
If data is specified for a node which does not support data.
| |
DOM_NO_MODIFICATION_ALLOWED_ERR
(integer)
| 7 |
If an attempt is made to modify an object where modifications are not allowed.
| |
DOM_NOT_FOUND_ERR
(integer)
| 8 |
If an attempt is made to reference a node in a context where it does not exist.
| |
DOM_NOT_SUPPORTED_ERR
(integer)
| 9 |
If the implementation does not support the requested type of object or operation.
| |
DOM_INUSE_ATTRIBUTE_ERR
(integer)
| 10 |
If an attempt is made to add an attribute that is already in use elsewhere.
| |
DOM_INVALID_STATE_ERR
(integer)
| 11 |
If an attempt is made to use an object that is not, or is no longer, usable.
| |
DOM_SYNTAX_ERR
(integer)
| 12 | If an invalid or illegal string is specified. | |
DOM_INVALID_MODIFICATION_ERR
(integer)
| 13 | If an attempt is made to modify the type of the underlying object. | |
DOM_NAMESPACE_ERR
(integer)
| 14 |
If an attempt is made to create or change an object in a way which is
incorrect with regard to namespaces.
| |
DOM_INVALID_ACCESS_ERR
(integer)
| 15 |
If a parameter or an operation is not supported by the underlying object.
| |
DOM_VALIDATION_ERR
(integer)
| 16 |
If a call to a method such as insertBefore or removeChild would make the Node
invalid with respect to "partial validity", this exception would be raised and
the operation would not be done.
|
User Contributed Notesme at somewhere dot com
08-Jan-2006 04:56
When using include/require statements to bring in common PHP code, you may accidentally put a blank line after the trailing "?>" in the included file (ie. two newlines following the "?>" sequence). The output will contain these blank lines and, for outputting HTML, this is no biggie as web browsers are usually relaxed about parsing HTML syntax. However, XML output generated via DOMDocument->saveXML() will be checked more carefully, and XML parsers (like the one that comes with firefox/mozilla) will complain that the <?xml ....?> tag doesn't begin on the first line.
While the best solution is to make sure blank lines do not trail in the included files, you can't always guarentee that a set of include files you grab from the internet will comply. Since the nature of DOM XML generation involves building the DOM structure first, then converting it all to XML, and finally printing it all in one shot, you can safely wipe any blank lines that snuck into the output buffer when files were getting included by calling ob_clear() right before printing/echoing the XML:
dom.php:
<?php
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->formatOutput = true;
?>
...garbage trailing at the end....
foobar.php:
<?php
include 'dom.php'
header("Content-type: text/xml");
ob_clean();
echo $doc->saveXML();
?>
simlee at indiana dot edu
29-Dec-2005 09:16
The project I'm currently working on uses XPaths to dynamically navigate through chunks of an XML file. I couldn't find any PHP code on the net that would build the XPath to a node for me, so I wrote my own function. Turns out it wasn't as hard as I thought it might be (yay recursion), though it does entail using some PHP shenanigans...
Hopefully it'll save someone else the trouble of reinventing this wheel.
<?php
function getNodeXPath( $node ) {
$parentNode = $node->parentNode;
if( $parentNode != null ) {
$nodeIndex = 0;
do {
$testNode = $parentNode->childNodes->item( $nodeIndex );
$nodeName = $testNode->nodeName;
$nodeIndex++;
if( !isset( $$nodeName ) ) $$nodeName = 1;
else $$nodeName++;
if( $nodeIndex > $parentNode->childNodes->length ) return( "/" );
} while( !$node->isSameNode( $testNode ) );
return( getNodeXPath( $parentNode ) . "/{$node->nodeName}[{$$nodeName}]" );
} else {
return( "" );
}
}
?>
johanwthijs-at-hotmail-dot-com
14-Dec-2005 03:25
Being an experienced ASP developer I was wondering how to replace textual content of a node (with msxml this is simply acheived by setting the 'text' property of a node). Out of frustration I started to play around with SimpleXml but I could not get it to work in combination with xPath.
I took me a lot of time to find out so I hope this helps others:
function replaceNodeText($objXml, $objNode, $strNewContent){
/*
This function replaces a node's string content with strNewContent
*/
$objNodeListNested = &$objNode->childNodes;
foreach ( $objNodeListNested as $objNodeNested ){
if ($objNodeNested->nodeType == XML_TEXT_NODE)$objNode->removeChild ($objNodeNested);
}
$objNode->appendChild($objXml->createTextNode($strNewContent));
}
$objXml= new DOMDocument();
$objXml->loadXML('<root><node id="1">bla</note></root>');
$objXpath = new domxpath($objXml);
$strXpath="/root/node[@id='1']";
$objNodeList = $objXpath ->query($strXpath);
foreach ($objNodeList as $objNode){
//pass the node by reference
replaceNodeText($objXml, &$objNode, $strImportedValue);
}
mark at vectrex dot org dot uk
17-Nov-2005 11:10
Note that these DOM functions expect (and presumably return) all their data in UTF-8 character encoding, regardless of what PHP's current encoding is. This means that text nodes, attribute values etc, should be in utf8.
This applies even if you're generating an XML document which is not ultimately in utf8.
Mark
toby at tobiasly dot com
22-Oct-2005 08:08
This module is not included by default either in the CentOS 4 "centosplus" repository. For those using PHP5 on CentOS 4, a simple "yum --enablerepo=centosplus install php-xml" will do the trick (this will install both the XML and DOM modules).
dariusz <at> grabka <dawt> org
30-Sep-2005 02:46
For those getting the following error with PHP 5.0.x:
Class 'DOMDocument' not found
... please check that the DOM extension has actually been installed. Based on the documentation, it seems like the DOM extension should be present defacto, but it wasn't part of my FreeBSD mod_php5 build.
The fix in FreeBSD 4.10+:
> cd /usr/ports/lang/php5-extensions
> make config
... select DOM, XML, and anything else your heart desires such as FTP and IMAP..
> make
> make install
> cd /usr/ports/www/mod_php5
> make
> make install
> vi /usr/local/etc/apache/httpd.conf
... remove all instances of *_php4* (otherwise, php5 may not load)
> apachectl restart
enjoy.
pes_cz
29-Sep-2005 09:32
When I tried to parse my XHTML Strict files with DOM extension, it couldn't understand xhtml entities (like ©). I found post about it here (14-Jul-2005 09:05) which adviced to add resolveExternals = true, but it was very slow. There was some small note about xml catalogs but without any glue. Here it is:
XML catalogs is something like cache. Download all needed dtd's to /etc/xml, edit file /etc/xml/catalog and add this line: <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="file:///etc/xml/xhtml1-strict.dtd" />
Thats all. Thanks to http://www.whump.com/moreLikeThis/link/03815
amir.laherATcomplinet.com
22-Aug-2005 02:09
This particular W3C page provides invaluable documentation for the DOM classes implemented in php5 (via libxml2). It fills in plenty of php.net's gaps:
http://www.w3.org/TR/DOM-Level-2-Core/core.html
Some key examples:
* concise summary of the class heirachy (1.1.1)
* clarification that DOM level 2 doesn't allow for population of internal DTDs
* explanation of DOMNode->normalize()
* explanation of the DOMImplementation class
The interfaces are described in OMG's Interface Definition Language
lhaire at lettres dot unige dot ch
18-Aug-2005 06:39
Text nodes contain utf-8 encoding internally, no matter if you specify iso-8859-1 in the file you parse or create a new doc using
$xmltree = new DomDocument('1.0','iso-8859-1');
The solution is to use utf8_decode
$original =
utf8_decode(
$myitem->getElementsByTagName('ORIGINAL')->item(0)->nodeValue);
keyvez at hotmail dot com
12-Aug-2005 09:22
More on the Famous White Space Problem
I was driven to the point of insanity while parsing two XML files. One would parse just fine and the other would give errors.
The preserveWhiteSpace property when set to false would remove white space from one file but not from the other.
So I knew that there was problem with the XML file and not with the parser problem. The XML was well formed so it was not the XML, it had to be something that I couldn't see. It was the white space.
Windows stores a newline as a string of two characters i.e. \r\n and unix stores them as just \n. The preserveWhiteSpace function when set to false would remove all the \n from outside the tags but the \r character still remains if the file is encoded in the windows (wrong) newline format.
So I use the following which adds to the complexity of the program but does the job.
<?php $XMLFileContent = implode('',spliti("\r",implode('',file($Template)))); ?>
Note: This could be improved if efficiency is required.
keyvez at hotmail dot com
09-Aug-2005 04:11
The famous XML white space problem can be easily solved by using the preserveWhiteSpace property of DOMDocument.
example
filename: book.xml
<root>
<data>
<name>If Tomorrow Comes...</name>
<author>Sidney Sheldon</author>
</data>
</root>
<?php
$DOM = new DOMDocument();
$DOM->load('book.xml');
echo $DOM->saveXML();
?>
<?php
$DOM = new DOMDocument();
$DOM->preserveWhiteSpace = false;
$DOM->load('book.xml');
echo $DOM->saveXML();
?>
aidan at php dot net
19-Jul-2005 03:04
As of PHP 5.1, libxml options may be set using constants rather than the use of proprietary DomDocument properties.
DomDocument->resolveExternals is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDATTR
DomDocument->validateOnParse is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDVALID
PHP 5.1 users are encouraged to use the new constants.
Example:
DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDATTR);
DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDVALID);
aidan at php dot net
19-Jul-2005 05:27
php at webdevelopers dot cz
14-Jul-2005 09:05
[Editor's Note: If you're using entities, then you have no choice. XML Catalogs can speed DTD resolution.]
Never use
$dom->resolveExternals=true;
when parsing XHTML document that has the DOCTYPE declaration with DTD URL specified in it.
Otherwise parsing the XHTML with DOCTYPE like this one:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
will result in PHP/DOM downloading the DTD file from W3C site when parsing your document. It will add extra delay to your script - I experienced that $dom->load()'s total time was from 1 to 16 seconds.
elixon
mjs15451 at hotmail dot com
10-Jun-2005 05:04
Disregard the last post from toma at smartsemantics dot com. His function does not parse xml properly. It does not take into account multiple tags of the same name, multiple of the same attributes in each tag and even attributes that might occur once and not in the others. So there is no way to accurately tell where you are in the XML structure. I modified this function and tested it. If there are any bugs, feel free to modify it and repost but to my knowledge this is an accurate XML parsing function:
function parseXML($dom, &$arrXML){
$arrPointer = &$arrXML;
$dom = $dom->firstChild;
while (! is_null($dom)){
switch ($dom->nodeType){
case XML_TEXT_NODE:
if (trim($dom->nodeValue) != ''){ //if there are tags inside a tag, generally there isn't a text value so don't show it
$arrPointer['value'] = $dom->nodeValue;
}
break;
case XML_ELEMENT_NODE:
$arrPointer = &$arrXML[$dom->nodeName][];
if ($dom->hasAttributes()){
$attributes = $dom->attributes;
foreach ($attributes as $index => $oAttr){
$arrPointer['attributes'][$oAttr->name] = $oAttr->value;
}
}
break;
}
if ($dom->hasChildNodes()){
parseXML($dom, $arrPointer);
}
$dom = $dom->nextSibling;
}
}
toma at smartsemantics dot com
12-May-2005 04:22
Based loosely on some previously provided examples, here are 2 functions to read in an XML file using DOM and parse it into a usable array for reading/access. The output is a very clean array.
------------------------------------
function LoadXMLFile( $path,$file) {
$oldpath= getcwd( ) ;
chdir( $path) ;
$dom= DOMDocument::load( $path.$file) ;
chdir( $oldpath) ;
$xml= array( ) ;
parseXML( $dom,$xml) ;
return $xml;
}
function parseXML( $dom,&$arr)
{
$arr_ptr= &$arr;
$dom= $dom->firstChild;
while( !is_null( $dom) ) {
switch ( $dom->nodeType) {
case XML_TEXT_NODE:
if( trim( $dom->nodeValue) != '') {
if( is_array( $arr_ptr) ) {
$arr_ptr[]= $dom->nodeValue;
}
elseif( $arr_ptr != '') {
$arr_ptr= array( $arr_ptr) ;
$arr_ptr[]= $dom->nodeValue;
}
else{
$arr_ptr= $dom->nodeValue;
}
}
break;
case XML_ELEMENT_NODE:
$arr_ptr= &$arr[$dom->nodeName];
if ( $dom->hasAttributes( ) ) {
$attributes= $dom->attributes;
foreach( $attributes as $index= >$domobj) {
$arr_ptr['ATTRIBUTES'] [$domobj->name]= $domobj->value;
}
}
break;
}
if( $dom->hasChildNodes( ) ) {
parseXML( $dom,$arr_ptr) ;
}
$dom= $dom->nextSibling;
}
}
------------------------------------
Example usage:
$CONFIG= LoadXMLFile( '/var/www/html/site.com/php-bin/','config.xml') ;
sofa77 at gmx dot de
02-May-2005 05:34
please take account, that the following - usually working check - won't work as expected. i was looking for a too long time for an error, where no error were.
<?php
$last = null;
$dom = new DOMDocument;
$first = $dom->createElement('firstEl');
$last = $dom->appendChild($first);
$second = $dom->createElement('secondEl');
$last = $last->appendChild($second);
echo htmlspecialchars($dom->saveXML());
echo $last->parentNode->nodeName;
if(!isset($last->parentNode->nodeName))
{
trigger_error('WRONG NOTICE: no parent', E_USER_NOTICE);
}
if(!$last->parentNode)
{
trigger_error('no parent', E_USER_NOTICE);
}
if(!$last->parentNode->nodeName)
{
trigger_error('no parent', E_USER_NOTICE);
}
?>
spammable69 at hotmail dot com
12-Apr-2005 07:18
I wrote a framework to implement the StyleSheet interfaces as specified on the W3C website. The code is written in PHP, and is NOT a complete implementation. Use it how ya like. I was planning on adding the CSSStyleSheet interfaces as well. Feel free to ask.
<?
class StyleSheetList {
public length;
private self;
function __construct ( ) {
$this->self = array();
}
function __get($property, $&ret) {
if($property == 'length')
$ret = count($this->self);
return true;
}
function __set($property, $val) {
if($property == 'length')
return true;
}
function item( $index ) {
return $this->self[$index];
}
}
class MediaList extends StyleSheetList {
function appendMedium ( $newMedium ) {
array_push($this->self, $newMedium);
}
function deleteMedium ( $oldMedium ) {
foreach($this->self as $item) {
if( $item == $oldMedium ) {
$item = $this->self[ $this->length-1 ];
array_pop($this->self);
break;
}
}
}
}
class DocumentStyle {
public styleSheets;
function __construct ( ) {
$this->styleSheets = new StyleSheetList();
}
function __set($property, $val) {
if($property == 'styleSheets')
return true;
}
}
class LinkStyle {
public sheet;
function __construct () {
$this->sheet = new StyleSheet();
}
function __set($property, $val) {
if($property == 'sheet')
return true;
}
}
class StyleSheet {
public type;
public disabled;
public ownerNode;
public parentStyleSheet;
public href;
public title;
public media;
function __construct( $type, $disabled, $ownerNode, $parentStyleSheet, $href, $title){
$this->type = $type;
$this->disabled = $disabled;
$this->media = new MediaList();
$this->ownerNode = $ownerNode;
$this->parentStyleSheet = $parentStyleSheet;
$this->href = $href;
$this->title = $title;
}
}
?>
Only contactable via http://murpsoft.com/contact.html
shruti224 at yahoo dot com
31-Mar-2005 05:25
my bad..its not an attribute ..its a text element node so if one checks for that, it can be easily corrected.
Wrote the corrected function. I hope it takes care of all conditions. If someone finds any issues with it, I would be glad to know about it.
function readXml($domnode, &$array)
{
$array_ptr = &$array;
$domnode = $domnode->firstChild;
while (!is_null($domnode))
{
switch ($domnode->nodeType)
{
case XML_TEXT_NODE: if(!(trim($domnode->nodeValue) == ""))
$array_ptr['cdata'] = $domnode->nodeValue;
break;
case XML_ELEMENT_NODE:
$array_ptr = &$array[$domnode->nodeName][];
if ($domnode->hasAttributes() )
{
$attributes = $domnode->attributes;
foreach ($attributes as $index => $domobj)
{
$array_ptr[$domobj->name] = $domobj->value;
}
}
break;
}
if ( $domnode->hasChildNodes() )
{
readXml($domnode, $array_ptr);
}
$domnode = $domnode->nextSibling;
}
}
roger4a45 at yahoo dot es
23-Feb-2005 12:35
Output a special chars like à in your XML/XSLT
Following example create a easy XML that is transformed by a xsl i'll show below:
XSL FILE v1.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:template match="TEST">
<xsl:value-of select="NAME"/><BR/>
</xsl:template>
</xsl:stylesheet>
PHP SOURCE CODE
<?php
$xml = new DOMDocument('1.0', 'utf-8'); $xsl = new DOMDocument;
$xsl->load('v1.xsl');
$proc = new XSLTProcessor;
$root = $xml->CreateElement("TEST");
$val = utf8_encode ('Andr
|