1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

PHP: SimpleXML и namespace

Тема в разделе "Web Coding", создана пользователем andead, 18 фев 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    есть код

    PHP:
    <?php

    $xmlstr 
    = <<<XML
    <?xml version='1.0' standalone='yes'?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:o="urn:schemas-microsoft-com:office:office"
     xmlns:x="urn:schemas-microsoft-com:office:excel"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:html="http://www.w3.org/TR/REC-html40">
        <Table>
            <Row ss:AutoFitHeight="0" ss:StyleID="s16"/>
            <Row ss:AutoFitHeight="0" ss:Height="2.25"/>
        </Table>
    </Workbook>
    XML;

    $xml = new SimpleXMLElement($xmlstr);

    echo 
    '<pre>';
    print_r($xml->Table);
    echo 
    '</pre>';

    ?>
    почему на выходе нет атрибутов у Row? если удалить пространство имён то они появятся :bc:
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    при чем тут пространство имен ?
    ,структуру xml файла смотрел ?

    z например нифига не понял


    Row не имеет атрибутов, потому как у тебянет объекта Row, есть Row....

    может ты надо
    PHP:
    $xmlstr = <<<XML
    <?xml version='1.0' standalone='yes'?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:o="urn:schemas-microsoft-com:office:office"
     xmlns:x="urn:schemas-microsoft-com:office:excel"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:html="http://www.w3.org/TR/REC-html40">
        <Table>
            Row ss:AutoFitHeight="0" ss:StyleID="s16"
            Row ss:AutoFitHeight="0" ss:Height="2.25"
        </Table>
    </Workbook>
    XML;
    ?,или еще как
    логику структуры опиши
     
  3. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    конечно смотрел, это кусок из файла, который получается при экспорте XLS в XML

    а это что =)?
    Код:
    ...
            <Row ss:AutoFitHeight="0" ss:StyleID="s16"/> 
            <Row ss:AutoFitHeight="0" ss:Height="2.25"/>
    ...
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    я не понял что тебе нужно сделать, напиши нормально

    echo($xml->Table->Row->asXML());
    echo($xml->Table->Row[0]->asXML());
    echo($xml->Table->Row[1]->asXML());
    ну или
    echo($xml->Table->asXML());
    что там тебе надо ...

    пробовал ?
     
  5. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    мне нужно прочитать атрибуты у всех Row:
    AutoFitHeight
    StyleID
    Height

    Код:
    <Table>
            <Row ss:AutoFitHeight="0" ss:StyleID="s16"/>
            <Row ss:AutoFitHeight="0" ss:Height="2.25"/>
    </Table>
    странно было ожидать чего то ещё)))

    проблемма в пространстве имён, почему то запись вида ss:атрибут вводит парсер в замешательство, без него всё отлично работает((
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    так бы и сказал что нужны атрибуты

    ну удали пространство имен
    PHP:
    <?php

    $xmlstr 
    = <<<XML
    <?xml version='1.0' standalone='yes'?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:o="urn:schemas-microsoft-com:office:office"
     xmlns:x="urn:schemas-microsoft-com:office:excel"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:html="http://www.w3.org/TR/REC-html40">
        <Table>
            <Row ss:AutoFitHeight="0" ss:StyleID="s16"/> 
            <Row ss:AutoFitHeight="0" ss:Height="2.25"/> 
        </Table>
    </Workbook>
    XML;
    $xmlstr=str_replace("ss:","",$xmlstr);
    $xml = new SimpleXMLElement($xmlstr);

    echo 
    '<pre>';
    print_r($xml->Table);
    echo 
    '</pre>';

    ?>
     
  7. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    так и делал, а если всётаки делать по умному?)
     
  8. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    121
    Симпатии:
    38
    хм. мне всегда почему то казалось что SimpleXML не поддерживает namespace =)
     
  9. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    2 Dogmat
    поддерживать то он поддерживает

    SimpleXMLElement-> getDocNamespaces()
    SimpleXMLElement-> getNamespaces() и т.д.
    читал статьи на эту тему, хз у меня так ничего и не пошло ...

    2 andead: по-умному , это когда работает =)
     
  10. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    121
    Симпатии:
    38
    посмотрел. действительно есть проблема с namespace у парсера SimpleXML. по стандартному проблема не решается. но вроде есть какие то решения на zend.com по этому поводу.

    если найду ссылку, кину.
     
Статус темы:
Закрыта.