Jan: SimpleXML und Unicode

Hallo,

ich experimentiere gerade ein bisschen mit xml und php, komme aber noch  nicht so recht weiter, Problem in meiner test.xml ist der Zeichencode in einem Attribut vermerkt:

<?xml version="1.0" encoding="UTF-8"?>
<content>
 <entry encoding="&#261;">1</entry>
 <entry encoding="&#377;">2</entry>
</content>

Will ich nun den Wert des encoding Attributes auslesen, bekomme ich nicht Beispielsweise "&#261;" zurück, sondern immer direkt das Zeichen. Gibt es eine Möglichkeit über simplexml "&#261;" auszulesen anstatt das  Zeichen ? - Ohne die xml Datei zu verändern!

php code kurz und bündig ;P

define( 'XMLSOURCEFILE', 'test.xml');

if( file_exists( XMLSOURCEFILE)) {

$xmlObj = simplexml_load_file( XMLSOURCEFILE);

foreach( $xmlObj->entry as $value) {
  echo $value['encoding'];
 }
 echo $xmlObj->asXML();
} else {
 die('Could not read ' . XMLSOURCEFILE . '!');
}
?>

Danke für die Hilfe!

Gruß Jan

  1. hi,

    <entry encoding="&#261;">1</entry>
    <entry encoding="&#377;">2</entry>
    </content>

    Will ich nun den Wert des encoding Attributes auslesen, bekomme ich nicht Beispielsweise "&#261;" zurück, sondern immer direkt das Zeichen. Gibt es eine Möglichkeit über simplexml "&#261;" auszulesen anstatt das  Zeichen ?

    Probier mal, beim Einlesen der Datei die Option LIBXML_NOENT mitzugeben.
    (Ich weiss nicht, ob das für nummerische Zeichenreferenzen "funzt" - oder nur für Entities.)

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Probier mal, beim Einlesen der Datei die Option LIBXML_NOENT mitzugeben.
      (Ich weiss nicht, ob das für nummerische Zeichenreferenzen "funzt" - oder nur für Entities.)

      gruß,
      wahsaga

      Hi,

      habs grad noch schnell getestet, bei nummerischen Codes funktioniert das leider nicht ...

      Gruß Jan

  2. echo $begrüßung;

    <?xml version="1.0" encoding="UTF-8"?>
    <content>
    <entry encoding="&#261;">1</entry>
    <entry encoding="&#377;">2</entry>
    </content>

    Will ich nun den Wert des encoding Attributes auslesen, bekomme ich nicht Beispielsweise "&#261;" zurück, sondern immer direkt das Zeichen. Gibt es eine Möglichkeit über simplexml "&#261;" auszulesen anstatt das  Zeichen ? - Ohne die xml Datei zu verändern!

    Mit SimpleXML greifst du auf die Daten zu, nicht auf die Quelltext-Darstellung. Die Daten sind im Prinzip das was man haben möchte. Dass sie aufgrund der Besonderheiten von XML in einer anderen Form gespeichert sein können, ist dabei unerheblich. Wenn du ein &#261; statt eines ą haben möchtest musst du das & schon XML-gerecht als &amp; in der Quelle notieren. Oder du schreibst dir einen Halb-Parser, der die Dekodierung der Entities übergeht. Oder du verwendest htmlentities(). Warum möchtest du überhaupt eine Ersatzdarstellung statt des richtigen Zeichens haben?

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Hi,

      Mit SimpleXML greifst du auf die Daten zu, nicht auf die Quelltext-Darstellung. Die Daten sind im Prinzip das was man haben möchte. Dass sie aufgrund der Besonderheiten von XML in einer anderen Form gespeichert sein können, ist dabei unerheblich. Wenn du ein &#261; statt eines ą haben möchtest musst du das & schon XML-gerecht als &amp; in der Quelle notieren. Oder du schreibst dir einen Halb-Parser, der die Dekodierung der Entities übergeht. Oder du verwendest htmlentities(). Warum möchtest du überhaupt eine Ersatzdarstellung statt des richtigen Zeichens haben?

      kk, ich glaub ich habs verstanden, Danke! ;P

      Was ich aber dennoch komisch finde, das in einer generierten xml Datei (Textansicht) das "&" nicht als "&amp;" drin steht. Oder ist das bei XSLT Prozessen wieder anderst? Ging letztendlich darum eine bestehende xml Datei für einen Prozess anzupassen ...

      "htmlentities" hatte ich mir schon angesehen, aber wie gesagt stutzig gewesen, da die Ergebnisse nicht so aussahen wie im Orginal (Bezogen auf das Attribut)...

      Gruß Jan

      echo "$verabschiedung $name";

      1. Moin!

        Was ich aber dennoch komisch finde, das in einer generierten xml Datei (Textansicht) das "&" nicht als "&amp;" drin steht. Oder ist das bei XSLT Prozessen wieder anderst? Ging letztendlich darum eine bestehende xml Datei für einen Prozess anzupassen ...

        Definiere "Textansicht".

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Was ich aber dennoch komisch finde, das in einer generierten xml Datei (Textansicht) das "&" nicht als "&amp;" drin steht. Oder ist das bei XSLT Prozessen wieder anderst? Ging letztendlich darum eine bestehende xml Datei für einen Prozess anzupassen ...

          Definiere "Textansicht".

          • Sven Rautenberg

          Hi,

          Im Texteditor oder xml Editor (Codeansicht) ... aufjedefall nicht im ie etc. , welcher das &amp; wieder als & interpretieren würde :P

          Gruß Jan