[SimpleXML] Ajout de noeuds et namespaces
Bonjour,
Voila, je travaille sur un fichier xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="xml">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="Nom" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="7" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Prenom" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="8" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Rue" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Nbr" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//xml" />
<xs:field xpath="Id" />
</xs:unique>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" />
</DataSet> |
J'utilise pour ce faire SipleXml, et je voudrais ajouter un(des) noeuds.
Pour l'instant j'ai ceci comme code php :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
$xmlDataSet = simplexml_load_string($string);
$NewDataSet = $xmlDataSet->addChild('NewDataSet');
openDb();
$result = mysql_query("select * from xml") or die;
while ($row = mysql_fetch_assoc($result)) {
$tableRow = $NewDataSet->addChild(xml);
$i=0;
while ($i < mysql_num_fields($result)) {
$meta = mysql_fetch_field($result, $i);
$tableRow->addChild($meta->name,$row[$meta->name]);
$i++;
}
} |
Bien entendu, si je pose la question c'est que le resultat ne me satisfait pas :D
Mon fichier Xml devient ceci,
je passe tout le debut du code Xml pour faire court :roll:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
/*............*/
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"/>
<NewDataSet>
<xml>
<Id>1</Id>
<Nom>Mon Nom</Nom>
<Prenom>Mon Prenom</Prenom>
<Rue>Ma Rue</Rue>
<Nbr>Mon Num</Nbr>
</xml>
<xml>
<Id>2</Id>
<Nom>Son Mon</Nom>
<Prenom>Son Prenom</Prenom>
<Rue>Sa Rue</Rue>
<Nbr>Son Num</Nbr>
</xml>
</NewDataSet>
</DataSet> |
Et en fait mon fichier devrais ressembler a ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
/*............*/
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet>
<xml diffgr:id="xml1" msdata:rowOrder="0">
<Id>1</Id>
<Nom>Mon Nom</Nom>
<Prenom>Mon Prenom</Prenom>
<Rue>Ma Rue</Rue>
<Nbr>Mon Num</Nbr>
</xml>
<xml diffgr:id="xml2" msdata:rowOrder="1">
<Id>2</Id>
<Nom>Son Mon</Nom>
<Prenom>Son Prenom</Prenom>
<Rue>Sa Rue</Rue>
<Nbr>Son Num</Nbr>
</xml>
</NewDataSet>
</diffgr:diffgram>
</DataSet> |
On peut donc observer qu'il manque,dans chaque noeud "<xml>", la reference au NameSpace, de meme que la balise fermante de la declaration du NameSpace.
je me doute bien que c'est dans
Code:
$tableRow->addChild($meta->name,$row[$meta->name]);
qu'il faut y faire reference mais, voila ma question :yaisse2: ,comment faire ?
PS : certains auront remarques qu'il s'agit d'un DataSet VisualC# serialisé :aie: