Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
busyboy
Witam.

Mam plik xml o następującej zawartości :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3. <priceMode>N</priceMode>
  4. <attributes/>
  5. <guid>35b7efa4-9a81-4998-bcfe-7e5f7e42fbbb</guid>
  6. <currency>PLN</currency>
  7. <priceTypeId>9</priceTypeId>
  8. <documentSeries>IZAM</documentSeries>
  9. <sourceDocument>IZAM/4545/2020 B</sourceDocument>
  10. <contractorId>7612</contractorId>
  11. <deliveryAddressType>896</deliveryAddressType>
  12. <deliveryAddressId>30566</deliveryAddressId>
  13. <payerId>7612</payerId>
  14. <warehouse>7</warehouse>
  15. <operator>85</operator>
  16. <documentDate>2020-06-24 03:20:15.000</documentDate>
  17. <reservation>0</reservation>
  18. <reservationStartDate>2020-06-24 03:20:15.000</reservationStartDate>
  19. <expirationDate>2020-06-24 03:20:15.000</expirationDate>
  20. <realizationDate>2020-06-24 03:20:15.000</realizationDate>
  21. <confirmDocument>0</confirmDocument>
  22. <description>IZAM/4545/2020 </description>
  23. <paymentType>20</paymentType>
  24. <paymentDays>21</paymentDays>
  25. <context>68</context>
  26. <akwNumber null="true"/>
  27. <targetContractorId null="true"/>
  28. <positions>
  29. </positions>
  30. </root>


Za pomocą

  1. $plik = file_get_contents("IN/$file");
  2. $plik = htmlspecialchars($plik);


Przypisuje jego zawartość do zmiennej $plik

W jaki sposób wyświetlić np wartość między znacznikami <guid>..........</guid> ?

Próbowałem to zrobić za pomocą preg_match ale niestety mi nie wychodzi sad.gif
nospor
A po grzyba htmlspecialchars ?
No i po XML najlepiej porusza sie przy pomocy dedykowanych bibliotek do PDF
busyboy
Po to htmlspecialchars aby wyświetlił mi znaczniki html z pliku

Potraktujmy ten plik xml tak jak zwykły plik txt, chodzi o wyciągnięcie danych między znacznikami
nospor
No ale zdaje sie najpierw chcesz cos znalezc co nie? DO etapu wyswietlania jeszcze daleko
viking
Cytat(busyboy @ 25.06.2020, 12:08:43 ) *
Po to htmlspecialchars aby wyświetlił mi znaczniki html z pliku

Potraktujmy ten plik xml tak jak zwykły plik txt, chodzi o wyciągnięcie danych między znacznikami

Zdecydowanie nie należy xml traktować jako zwykły plik txt i robić sieczki regexpem. Masz odpowiednie biblioteki w php do tego, masz zewnętrzne ułatwiające czytanie (choćby z synfony).
busyboy
No tak ale to ma być jednorazowe wyciągnięcie danych z pliku xml, pewnie to nie dobre rozwiązanie ale proste
viking
Ale jaki masz problem z jednorazowym wyciągnięciem tych danych za pomocą rzeczy do tego stworzonych skoro regexp jak mniemam nie umiesz i tak napisać?
Czy naprawdę użycie simplexml jest tak mega trudne do tego?
busyboy
Dalego proszę o pomoc w tym przykładzie, napisanie reguły do ciągu
busyboy
Dziękuje za link, ale jeżeli to możliwe proszę o przykład z wyrażeniami regularnymi....
viking
Nie ma problemu ale jeśli to możliwe pokaż jak za pomocą simplexml to zrobiłeś...
busyboy
Coś takiego

  1. $plik = file_get_contents("IN/$file");
  2. $dane = new SimpleXMLElement($plik);
  3. echo $dane->root[0]->positions;
viking
Na pewno nie coś takiego. Pokaż że nie czekasz tylko na gotowe i wybierz ten guid. A potem się zastanów czy 2 banalne linie kodu są tak dużo gorsze od zawodnego regexpa.
javafxdev
tak z ciekawości jak wpadłeś na pomysł wpisania positions zamiast guid skoro chcesz mieć guid - co Cię naprowadziło na postions zamiast na guid?
busyboy
Kod poniżej :

  1. $xml = new SimpleXMLElement($plik);
  2. echo $xml->guid;


Pytanie a jak jest kilka znaczników np.

  1. <positions>
  2. <row>
  3. <productGid>407</productGid>
  4. <quantity>2</quantity>
  5. <netValue/>
  6. <description/>
  7. </row>
  8. <row>
  9. <productGid>409</productGid>
  10. <quantity>4</quantity>
  11. <netValue/>
  12. <description/>
  13. </row>
  14. <row>
  15. <productGid>408</productGid>
  16. <quantity>4</quantity>
  17. <netValue/>
  18. <description/>
  19. </row>
  20.  
  21. </positions>


Jak to odczytać ? w pętli ? mogę prosić jakiś przykład ?
viking
  1. foreach($xml->positions->row as $row) {
  2. echo $row->productGid;
  3. };
kreatiff
Wyświetli wszystkie guidy z pliku (ale jak jest jeden, to tylko jego). Nie wczytuje pliku do pamięci (jak jest mały, nie ma różnicy, jak plik ma kilka megabajtów, bo trudno o coś bardziej wydajnego niż XMLReader):
  1. $xml = new XMLReader;
  2. $xml->open('sciezka_do_twojego_pliku_xml/plik.xml');
  3. while($xml->read()) {
  4. if ($xml->name === 'guid') echo $xml->readString();
  5. }
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.