Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP i XML dodawanie, usuwanie, edycja wyszukiwanie, początkujący z XML proszę o pomoc
prusik
post 21.01.2009, 00:21:19
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.01.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
EarthCitizen
post 21.01.2009, 00:24:58
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


A możesz podać schema do tego xmla?
Go to the top of the page
+Quote Post
prusik
post 21.01.2009, 23:31:14
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.01.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował prusik 21.01.2009, 23:32:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:09