Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i XML dodawanie, usuwanie, edycja wyszukiwanie
Forum PHP.pl > Forum > XML, AJAX > XML
prusik
Witam!
Jak w tytule mam wykonać prace ale nie mam pojęcia jak napisać kod php aby dodawał i zapisywał rekordy w pliku XML
Mam przykładowy plik XML z arkuszem i schema (arkusz i schema działają poprawnie)

Kod
   <?xml version="1.0" encoding="UTF-8"?>
   <?xml-stylesheet type="text/xsl" href="towar.xsl"?>
   <baza xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="towar.xsd">
  
     <towar id="1">
       <nazwa>Mleko łaciate</nazwa>
       <waznosc>21.03.2009</waznosc>
       <rodzaj>nabiał</rodzaj>
       <info>sda</info>
     </towar>
   </baza>

Teraz chce napisać kod php aby dodawał następny rekord np towar id="2" próbowałem DOMem ale nie wiem dokładnie jak powinien wyglądać kod php wstawiający nowy rekord próbowałem tak:

Kod
   <?
   $xml = new DOMDocument();
   $xsl = new DOMDocument();
  
   $xml->load("baza.xml");
   $xsl->load("towar.xsl");
   $baza = $xml->documentElement;
  
   $procesor = new XSLTprocessor();
   $procesor->importStylesheet($xsl);
   echo $procesor->transformToXML($xml);
  
  
  
    $towar = $baza->createElement('towar','2');
    $nazwa = $baza->createElement('nazwa','chleb');
    $waznosc = $baza->createElement('waznosc','12.04.2009');
    $rodzaj = $baza->createElement('rodzaj','pieczywo');
    $info = $baza->createElement('info','cos tam');
    
   $baza->appendChild($towar);
   $towar->appendChild($nazwa);
   $towar->appendChild($waznosc);
   $towar->appendChild($rodzaj);
   $towar->appendChild($info);
  
  
   echo $xml->saveXml();
  
   ?>

Ale niestety nic nie dodaje nie mam pojecia szczerze mówiac jak to zrobić jestem początkującym programistą mam 13 lat,mój starszy brat ma to zrobić na studia i chce pokazać, że umie coś zrobić a nawet jak nie zrobić to znależć na necie smile.gif. Prosze o wszelką pomoc z góry dziękuje i pozdrawiam
EarthCitizen
A możesz podać schema do tego xmla?
prusik
Witam ponownie!

Udało mi się napisać kod php który dodaj do bazy xml ale nie do końca jest to co chciałem nie wiem jak zrobić żeby w danym pliku xml był już na stałe wpisany element <baza> ze schema i kodowaniem czyli
Kod

    <?xml version="1.0" encoding="UTF-8"?>
    <baza xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="towar.xsd"></baza>


i żeby dodać tylko kolejne elementy <towar> id to wiadomo recznie wystarczy jak wpisze. A i podany kod poniżej dodaje o bazy po dodaniu dwoch kolejnych przy trzecim wyskakuje przełodowanie xml tzn ze nie moze dodać bo cos tam jest i po odświeżeniu jeszcze raz kasuje poprzednie i wstawia nowe.

podaje plik php
Kod
   <?
    $xml = new DOMDocument();
    $xsl = new DOMDocument();
    
    $xml->formatOutput = true;
    $xml->preserveWhiteSpace = false;
    $xml->load("baza.xml");
    $xsl->load("towar.xsl");
    
    $procesor = new XSLTprocessor();
    $procesor->importStylesheet($xsl);
    echo $procesor->transformToXML($xml);
    
    
    $baza = $xml->createElement('baza');
    $schema = $xml->appendChild($baza);
     $schema->setAttribute('xmlns:xsi','"http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="towar.xsd"');
     $towar = $xml->createElement('towar');
     $newtowar = $xml->appendChild($towar);
     $newtowar->setAttribute("id","5");
     $baza->appendChild($towar);
     $nazwa = $xml->createElement('nazwa','chleb');
     $towar->appendChild($nazwa);
     $waznosc = $xml->createElement('waznosc','12.04.2009');
     $towar->appendChild($waznosc);
     $rodzaj = $xml->createElement('rodzaj','pieczywo');
     $towar->appendChild($rodzaj);
     $info = $xml->createElement('info','cos tam');
     $towar->appendChild($info);
    
    
    $xml->save("baza.xml");
    ?>


z tym atrybutem bazy oczywiscie troche kombinowałem jakby tu dodać winksmiley.jpg

i schema zgodnie z sugestią kolegi

Kod
   <?xml version="1.0" encoding="UTF-8"?>
    
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="baza">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="towar" type="Towar-type" minOccurs="1" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:complexType name="Towar-type">
            <xs:all>
                <xs:element name="nazwa" type="xs:string"/>
                <xs:element name="waznosc" type="rok-type"/>
                <xs:element name="rodzaj" type="xs:string"/>
                <xs:element name="info" type="xs:string"/>
            </xs:all>
            <xs:attribute name="id" type="id-type" use="required"/>
        </xs:complexType>
        <xs:simpleType name="id-type">
            <xs:restriction base="xs:int">
                <xs:minInclusive value="1"/>
            </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="waznosc-type">
            <xs:restriction base="xs:int">
                <xs:pattern value="[0-9][09].[0-9][0-9].[0-9][0-9][0-9][0-9]"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:schema>


a i właśnie moze mi ktos podpowiedziec jak napisac formularz do tego żeby atrybuty poszczególnym elementom oprócz bazy można byłego przez niego wpisywać.

Dziękuje za wszelką pomoc

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.