Poco::XML::DOMWriter

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日からのダウンロード数:811

Subversion

・フリーの Subversion ホスティングサービス Assemblaで、ソースコードを管理しています。

Powered by POCO Copyright © 2010 Round Square Inc. All rights reserved.


Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>