Создание ODF

alan4ick

Новичок
Создание ODF

Начал разбираться с созданием XML и ODF файлов и столкнулся с первой проблемой :

как добавить дополнительные namespaces?

Нужно получить след. код для content.xml :

PHP:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"

С созданием одного понятно:

PHP:
$doc = new DOMDocument('1.0','UTF-8');
$document_content = $doc->createElementNS('urn:oasis:names:tc:opendocument:xmlns:office:1.0', 'office:document-content');
$doc->appendChild($document_content);
Как добавить остальные ?

-~{}~ 30.10.07 14:17:

Единственный пока найденный метод, след :

PHP:
$document_content->setAttributeNodeNs(new DOMAttr('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0'));
 

slach

Новичок
а чем не устраивает??
setAttributeNodeNs ???

вполне нормальный метод
разве нет?
 

alan4ick

Новичок
Автор оригинала: slach
а чем не устраивает??
setAttributeNodeNs ???
Вылезла следующая проблема...

Создаем основу докумета content.xml
PHP:
$nsOffice = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0';
$nsText = 'urn:oasis:names:tc:opendocument:xmlns:text:1.0';


$doc = new DOMDocument('1.0', 'UTF-8');
$elementDocument = $doc->createElementNS($nsOffice, 'office:document-content');

// создание нужного namespace в корневом элементе через атрибут
//$elementDocument->appendChild($doc->createAttributeNS($nsText, 'text:text'));
//$elementDocument->removeAttribute('text:text');

// добавление namespace
$elementDocument->setAttributeNodeNs(new DOMAttr('xmlns:text',$nsText));
//$elementDocument->setAttribute('xmlns:text', $nsText);

$doc->appendChild($elementDocument);

$elementBody = $doc->createElementNS($nsOffice, 'office:body');
$elementDocument->appendChild($elementBody);

$elementText = $doc->createElementNS($nsOffice, 'office:text');
$elementBody->appendChild($elementText);
то при добавление текста

PHP:
$elementText->appendChild($doc->createElementNS($nsText, 'text:p', utf8('просто текст')));
в результирующем коде для элемента <text:p> будет описан namespace, и заданный через
setAttributeNodeNs namespace для корневого элемента не сработал.


Код:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">
  <office:body>
    <office:text>
      <text:p xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">просто текст</text:p>
    </office:text>
  </office:body>
</office:document-content>

в книге Костерова как раз был указан данный момент, что
для добавления namespace в корневой елемент, нужно создать атрибут с нужным namespace , а потом его удалить.
В коде я описал данный момент и он работает, но это как-то через пятое место.

Получается что в данном случае нужно расширять DOMDocument и делать отработку добавления в корневой элемент не описанных
namespace.

Или есть еще идеи?
 

slach

Новичок
ну вообще поиск по DOM multiple namespace ничего не дал

судя по всему вам так и придется через пятую точку
 
Сверху