Autor Zpráva
Hitman
Profil
Ahoj,

pro čtení XML používám simplexml_load_file a funguje dobře jak pro tagy, tak atributy. Problém ale nastává kdy je v obsahu <, nebo uvozovky. V takovém případě se funkce nevykoná. Hledal jsem v dokumentaci, ale nic jsem pro můj případ neobjevil. Existuje něco jako simplexml_load_file_with_html, nebo měl by někdo tip jak to obejít?

Kdybych XML soubor vytvářel tak je to jednoduché, obsah zakóduji: <element atribut="zakodovany-obsah">, jenže já už ho mám hotový a když to zakóduji celé, tak mi to ta fce zase nerozebere. Věděl by někdo?

Pro upřesnění, jde o:
<hlavni>
  <element nazev="neco" html="<p>nejaky text<a href="aaa">atd.</a>...">
      Bezvýznamný text.
  </element>
</hlavni>
Chro
Profil
To není dobrý nápad vkládat tagy do hodnot atributů elementů. Když tak, tagy nesouvisející se strukturou xml vlož mezi elementy a obal sekvencí CDATA.
<tag><![CDATA[
<html>
]]></tag>
Hitman
Profil
To je mi jasné, ale já dostanu XML v daném formátu a nic s tím neudělám. Takže s SimpleXML to asi nepůjde.
Jan Tvrdík
Profil
Hitman:
já dostanu XML v daném formátu
Pokud to vypadá takto, tak to není XML a tedy to nejde zpracovat nástroji, které slouží pro práci s XML.
Joker
Profil
Hitman:
To není problém SimpleXML, ale toho, že ten dokument není platné XML.

Viz ukázka v [#1] a to, jak se tam zvýraznila syntaxe (sice HTML, ale to je v tomto případě jedno).
Chro
Profil
Hitman:
Parser nepozná HTML element od XML elementu, protože jakýkoli HTML element je vlastně platný XML element. Nedělá v tom rozdíly, tudíž se to musí ošetřovat třeba přes sekci CDATA, pokud mají být tagy součástí obsahu a ne struktury XML. Takže parser v příkladu [#1] defakto dělá toto:
Narazil jsem na platný element, pokračuji bez chyby. Dále jsem narazil na atribut elementu. Ten je neuzavřen, chybí určité znaky (uvozovka a koncová špičatá závorka) a následuje element blabla... Tudîž chyba, konec parsování (ve shodě se specifikací). Sbohem a šáteček.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: