aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/XML/src/DOMWriter.cpp
blob: 7d936aaa718db2c4d8cd8ae9105c263e6b42e78b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// 
// DOMWriter.cpp 
// 
// Library: XML 
// Package: DOM 
// Module:  DOMWriter 
// 
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. 
// and Contributors. 
// 
// SPDX-License-Identifier:	BSL-1.0 
// 
 
 
 
#include "Poco/DOM/DOMWriter.h" 
#include "Poco/XML/XMLWriter.h" 
#include "Poco/DOM/Document.h" 
#include "Poco/DOM/DocumentFragment.h" 
#include "Poco/DOM/DocumentType.h" 
#include "Poco/DOM/DOMException.h" 
#include "Poco/DOM/DOMSerializer.h" 
#include "Poco/SAX/LexicalHandler.h" 
#include "Poco/XML/XMLException.h" 
#include "Poco/Path.h" 
#include "Poco/FileStream.h" 
 
 
namespace Poco { 
namespace XML { 
 
 
DOMWriter::DOMWriter(): 
	_pTextEncoding(0), 
	_options(0), 
	_indent("\t") 
{ 
} 
 
 
DOMWriter::~DOMWriter() 
{ 
} 
 
 
void DOMWriter::setEncoding(const std::string& encodingName, Poco::TextEncoding& textEncoding) 
{ 
	_encodingName  = encodingName; 
	_pTextEncoding = &textEncoding; 
} 
 
 
void DOMWriter::setOptions(int options) 
{ 
	_options = options; 
} 
 
 
void DOMWriter::setNewLine(const std::string& newLine) 
{ 
	_newLine = newLine; 
} 
 
 
void DOMWriter::setIndent(const std::string& indent) 
{ 
	_indent = indent; 
} 
 
 
void DOMWriter::writeNode(XMLByteOutputStream& ostr, const Node* pNode) 
{ 
	poco_check_ptr (pNode); 
 
	bool isFragment = pNode->nodeType() != Node::DOCUMENT_NODE; 
 
	XMLWriter writer(ostr, _options, _encodingName, _pTextEncoding); 
	writer.setNewLine(_newLine); 
	writer.setIndent(_indent); 
	 
	DOMSerializer serializer; 
	serializer.setContentHandler(&writer); 
	serializer.setDTDHandler(&writer); 
	serializer.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<LexicalHandler*>(&writer)); 
	if (isFragment) writer.startFragment(); 
	serializer.serialize(pNode); 
	if (isFragment) writer.endFragment(); 
} 
 
 
void DOMWriter::writeNode(const std::string& systemId, const Node* pNode) 
{ 
	Poco::FileOutputStream ostr(systemId); 
	if (ostr.good()) 
		writeNode(ostr, pNode); 
	else  
		throw Poco::CreateFileException(systemId); 
} 
 
 
} } // namespace Poco::XML