Унаследовать от QDomNode для создания фрагментов кода PHP в QDomDocument - PullRequest
0 голосов
/ 05 апреля 2011

Я пишу программу, которая должна выводить код PHP, содержащий в основном базовый код HTML, но несколько команд PHP.Поэтому я хотел использовать QDomDocument для записи этого файла в объектно-ориентированном стиле.

Я создал класс QDomPHPCode, унаследованный от QDomNode.Я переписал save(), который записывает код PHP, включая <?...?>, в QTextStream.

Теперь проблема в том, что для создания такого элемента мне нужно вызвать один из фабричных методов QDomDocument::create...(), но, конечно, не существует ни одного для моего собственного класса.

Я думал о создании подкласса QDomDocument, чтобы реализовать такой метод для моего узла QDomPHPCode, и поэтому наблюдал исходный код QDomDocument.Функции create...() вызывают функции в QDomDocumentPrivate с одинаковыми именами, поэтому для реализации собственной функции create ... () необходимо создать ее в QDomDocumentPrivate.Последнее требует от меня подкласса QDomDocumentPrivate, который невидим для #include <QDomDocument> и поэтому не может быть разделен на подклассы, насколько я знаю.

Есть ли возможность сделать то, что я хочу сделать?Или это определенно лучший (или единственный) способ полностью создать файл PHP самостоятельно?

Заранее спасибо!

1 Ответ

1 голос
/ 05 апреля 2011

Проблема, которую я вижу, состоит в том, что документ PHP не является допустимым документом HTML / XML , поэтому у вас могут быть ошибки синтаксического анализа. PHP - интерпретатор, который анализирует специальный (PHP) документ, который может создать действительный документ HTML / xHTML / XML .

Итак, в качестве обходного пути я предлагаю вам добавить в документ некоторые теги, скажем <-- php-code-start --> и <-- php-code-end --> (используя QDomDocument), а затем проанализировать / заменить его после ( постобработка ).

Другой подход заключается в замене начального тега php начальным комментарием HTML, но вам все равно потребуется постобработка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...