Bonjour,
Contexte: Parseur, DOM / PHP (5.2)
Demande: Trouver toutes déclarations NS
Après chargement et traitement d'un DOM je veux l'afficher via un parseur
personnel mais je perds, alors, les déclarations des NS situés en seconde
position (sur le même tag). J'ai bien cherché partout mais pas de réponses
adéquates à la résolution du problème. Le DOM est bien valide, tous
les préfix/uri existent mais impossible de caler la déclaration du NS à l'endoit
ou elle était à l'origine. Autrement dit la sortie devient invalide.
Fonctions testées:
- getElementsByTagNameNS
- getAttributeNode
- getAttributeNS
- getElementsByTagNameNS
Entrée dans le DOMDocument:
Sortie parseur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14<body> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" h="azerty"/> <ex:test xmlns:ex="http://www.w3.org/2001/XMLExemple" attr="exemple"> <ex:t> <ex:h1> *** text *** </ex:h1> </ex:t> </ex:test> <ouv:livre xmlns:ouv='urn:loc.gov:livres' xmlns:isbn='urn:ISBN:0-395-36341-6'> <isbn:k alpha="1"/> </ouv:livre> </body>
Inutile de dire que le script est un simple exemple, merci... et merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14<body> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" h="azerty"/> <ex:test xmlns:ex="http://www.w3.org/2001/XMLExemple" attr="exemple"> <ex:t> <ex:h1> *** text *** </ex:h1> </ex:t> </ex:test> <ouv:livre xmlns:ouv="urn:loc.gov:livres"> <isbn:k alpha="1"/> </ouv:livre> </body>
aussi pour vos idées et solutions proposées.
J'ai, dans un premier temps j'ai résolu à placer la récupération des DECL dans
le node XML_DODUMENT_NODE mais j'ai abandonné l'idée. Un array qui se balade dans une class (même privat) c'est pas élégant, d'où ma demande.
Ma fonction primaire:
Ce qui donne lors de l'affichage du tableau:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 $allAttrNS = $this -> _domToParse -> getElementsByTagNameNS("*", "*"); if (is_object($allAttrNS)) { for($i=0; $i<$allAttrNS->length; $i++) { $prefix = $allAttrNS -> item($i) -> prefix; $uri = $allAttrNS -> item($i) -> namespaceURI; if (!array_key_exists($prefix, $this -> _arrayNS) && !is_null($prefix) && $prefix != "") { $this -> _arrayNS[$prefix] = $allAttrNS -> item($i) -> namespaceURI; } } print_r($this -> _arrayNS); }
Puis, traité par chaque noeud j'obtiens bien le placement des attributs NS mais comme vous le constaté c'est pas très propre... Et bien trop lourd.Array
(
[xs] => http://www.w3.org/2001/XMLSchema
[ex] => http://www.w3.org/2001/XMLExemple
[ouv] => urn:loc.gov:livres
[isbn] => urn:ISBN:0-395-36341-6
)
Ce que je souhaite, donc, c'est faire la même chose mais, directement, sur le Node Element. (XML_DOM_ELEMENT). Si quelqu'un a un idée, merci du partage.
Désolé si c'est encore un peu confus :-)




Répondre avec citation







Partager