Poco::XML::DOMWriter を紹介します。
さらに、Poco::XML::Document, Poco::XML::Element, Poco::XML::Text も紹介します。
DOMWriterTest.cpp
・Poco::XML::DOMWriter のインスタンスを作成して、setOptions() でオプションを設定し、setNewLine()
で改行コードを指定。
・Poco::XML::DOMImplementation::instance().createDocumentType() で <!DOCTYPE …> に宣言される
内容を指定し、それをもとに Poco::XML::Document をインスタンス化。
・createElement() や createTextNode() と appendChild() を繰り替えし呼んで、階層構造を構築。
#include <Poco/DOM/DOMWriter.h> #include <Poco/DOM/Document.h> #include <Poco/DOM/Element.h> #include <Poco/DOM/Attr.h> #include <Poco/DOM/Text.h> #include <Poco/XML/XMLWriter.h> #include <Poco/DOM/AutoPtr.h> #include <Poco/DOM/DocumentType.h> #include <Poco/DOM/DOMImplementation.h> #include <string> #include <iostream> #include <sstream> #include "ScopedLogMessage.h" #include "PrepareConsoleLogger.h" void TestDOMWriter(bool writeXMLDeclaration, const std::string& newLineCharacters) { Poco::XML::DOMWriter writer; int options = (writeXMLDeclaration ? Poco::XML::XMLWriter::WRITE_XML_DECLARATION:Poco::XML::XMLWriter::CANONICAL) | Poco::XML::XMLWriter::PRETTY_PRINT; writer.setOptions(options); writer.setNewLine(newLineCharacters); Poco::XML::AutoPtr<Poco::XML::DocumentType> pDoctype = Poco::XML::DOMImplementation::instance().createDocumentType( "html", "-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", ""); Poco::XML::AutoPtr<Poco::XML::Document> pDoc = new Poco::XML::Document(pDoctype); Poco::XML::AutoPtr<Poco::XML::Element> pRoot = pDoc->createElement("html"); pRoot->setAttribute("xmlns", "http://www.w3.org/1999/xhtml"); pDoc->appendChild(pRoot); Poco::XML::AutoPtr<Poco::XML::Element> pElem1 = pDoc->createElement("head"); pRoot->appendChild(pElem1); Poco::XML::AutoPtr<Poco::XML::Element> pElem10 = pDoc->createElement("title"); pElem1->appendChild(pElem10); Poco::XML::AutoPtr<Poco::XML::Text> pText10 = pDoc->createTextNode("Sample HTML"); pElem10->appendChild(pText10); Poco::XML::AutoPtr<Poco::XML::Element> pElem11 = pDoc->createElement("meta"); pElem11->setAttribute("http-equiv", "content-type"); pElem11->setAttribute("content", "text/html; charset=utf-8"); pElem1->appendChild(pElem11); Poco::XML::AutoPtr<Poco::XML::Element> pElem12 = pDoc->createElement("link"); pElem12->setAttribute("rel", "stylesheet"); pElem12->setAttribute("href", "css/styles.css"); pElem12->setAttribute("type", "text/css"); pElem1->appendChild(pElem12); Poco::XML::AutoPtr<Poco::XML::Element> pElem2 = pDoc->createElement("body"); pRoot->appendChild(pElem2); Poco::XML::AutoPtr<Poco::XML::Text> pText2 = pDoc->createTextNode("This is a sample."); pElem2->appendChild(pText2); std::ostringstream ostr; writer.writeNode(ostr, pDoc); std::cout << ostr.str(); } int main(int /*argc*/, char** /*argv*/) { PrepareConsoleLogger logger(Poco::Logger::ROOT, Poco::Message::PRIO_INFORMATION); ScopedLogMessage msg("DOMWriterTest ", "start", "end"); TestDOMWriter(true, Poco::XML::XMLWriter::NEWLINE_LF); return 0; } |
Results of execution
[0] DOMWriterTest start <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Sample HTML</title> <meta content="text/html; charset=utf-8" http-equiv="content-type"/> <link href="css/styles.css" rel="stylesheet" type="text/css"/> </head> <body>This is a sample.</body> </html> [0] DOMWriterTest end |
Downloads
・ここをクリックすると、makefile や VC++ プロジェクトなど一式がダウンロードできます。
(2013.05.31 updated)
・2010年8月4日からのダウンロード数:1116
Subversion
・フリーの Subversion ホスティングサービス Assemblaで、ソースコードを管理しています。
![]() |
Copyright © 2010 Round Square Inc. All rights reserved. |
---|
0 Comments.