62#include "KoXmlReader.h"
64#ifndef KOXML_USE_TQDOM
77 DTQString(
const TQString& s1,
const TQString& s2 ){ str1 = s1; str2 = s2; }
78 DTQString(
const DTQString& b ) { str1 = b.str1; str2 = b.str2; }
79 DTQString& operator=(
const DTQString& b ){ str1 = b.str1; str2 = b.str2;
return *
this; }
80 bool operator==(
const DTQString& b )
const {
return (str1==b.str1) && (str2==b.str2); }
81 bool operator!=(
const DTQString& b )
const {
return (str1!=b.str1) || (str2!=b.str2); }
82 bool operator<(
const DTQString& b )
const
83 {
return ( str1 < b.str1 ) ? true : ( str1==b.str1 ) ? str2<b.str2 : false; }
84 TQString s1()
const {
return str1; }
85 TQString s2()
const {
return str2; }
94 CHECK( b1==b2,
true );
95 CHECK( b1!=b2,
false );
97 b1 = DTQString(
"sweet",
"princess" );
98 b2 = DTQString(
"sweet",
"princess" );
99 CHECK( b1==b2,
true );
100 CHECK( b1!=b2,
false );
102 b1 = DTQString(
"sweet",
"princess" );
103 b2 = DTQString(
"bad",
"prince" );
104 CHECK( b1==b2,
false );
105 CHECK( b1!=b2,
true );
111 KoXmlStream(){ saveData =
true; data.reserve(1024); pos = 0; }
112 TQString stringData()
const {
return data; }
113 void setSaveData(
bool s ){ saveData = s; }
114 int at()
const {
return pos; }
115 KoXmlStream& operator<<(
const TQString& str )
116 {
if(saveData) data.append(str); pos+=str.length();
return *
this; }
117 KoXmlStream& appendEscape(
const TQString& str );
125KoXmlStream& KoXmlStream::appendEscape(
const TQString& str )
127 unsigned len = str.length();
131 data.reserve( data.length() + len );
132 for(
unsigned c=0; c<len; c++ )
133 if( str[c]==
'<' ){ data.append(
"<"); pos += 4; }
else
134 if( str[c]==
'>'){ data.append(
">"); pos+= 4; }
else
135 if( str[c]==
'"'){ data.append(
"""); pos += 6; }
else
136 if( str[c]==
'&'){ data.append(
"&"); pos += 5; }
else
137 { data.append( str[c] ); pos++; }
142 for(
unsigned c=0; c<len; c++ )
143 if( str[c]==
'<' ) pos += 3;
else
144 if( str[c]==
'>') pos+= 3;
else
145 if( str[c]==
'"') pos += 5;
else
146 if( str[c]==
'&') pos += 4;
157 virtual ~KoXmlNodeData();
160 KoXmlNode::NodeType nodeType;
162 TQString namespaceURI;
168 void ref() { count++; }
169 void unref() { --count;
if( !count )
delete this; }
172 virtual const char* typeInfo()
const {
return "Node"; }
173 TQString nodeName()
const;
176 KoXmlNodeData* parent;
179 KoXmlNodeData* first;
185 void appendChild( KoXmlNodeData* child );
186 virtual void clear();
187 KoXmlNodeData* ownerDocument();
190 void setAttribute(
const TQString& name,
const TQString& value );
191 TQString attribute(
const TQString& name );
192 bool hasAttribute(
const TQString& name );
193 void setAttributeNS(
const TQString& nsURI,
const TQString& name,
const TQString& value );
194 TQString attributeNS(
const TQString& nsURI,
const TQString& name );
195 bool hasAttributeNS(
const TQString& nsURI,
const TQString& name );
198 TQString data()
const;
199 void setData(
const TQString& data );
202 TQXmlSimpleReader* xmlReader;
204 bool setContent( TQXmlInputSource* source, TQXmlReader* reader,
205 TQString* errorMsg = 0,
int* errorLine = 0,
int* errorColumn = 0 );
209 unsigned startPos, endPos;
210 void loadChildren(
int depth=1 );
211 void unloadChildren();
215 TQMap<TQString,TQString> attr;
216 TQMap<DTQString,TQString> attrNS;
218 friend class KoXmlHandler;
221class KoXmlHandler :
public TQXmlDefaultHandler
224 KoXmlHandler( KoXmlNodeData*,
bool processNamespace );
227 void setMaxDepth(
int d ){ maxDepth = d; }
228 void setInitialOffset(
int ofs ){ parseOffset = ofs; }
231 bool startDocument();
234 bool startElement(
const TQString& nsURI,
const TQString& localName,
235 const TQString& qName,
const TQXmlAttributes& atts );
236 bool endElement(
const TQString& nsURI,
const TQString& localName,
237 const TQString& qName );
239 bool characters(
const TQString& ch );
240 bool processingInstruction(
const TQString& target,
const TQString& data );
241 bool skippedEntity(
const TQString& name );
246 bool startEntity(
const TQString & );
247 bool endEntity(
const TQString & );
248 bool startDTD(
const TQString& name,
const TQString& publicId,
249 const TQString& systemId );
250 bool comment(
const TQString& ch );
253 bool externalEntityDecl(
const TQString &name,
const TQString &publicId,
254 const TQString &systemId ) ;
257 bool notationDecl(
const TQString & name,
const TQString & publicId,
258 const TQString & systemId );
259 bool unparsedEntityDecl(
const TQString &name,
const TQString &publicId,
260 const TQString &systemId,
const TQString ¬ationName ) ;
263 bool fatalError(
const TQXmlParseException& exception );
270 bool processNamespace;
271 KoXmlNodeData* rootNode;
272 KoXmlNodeData* currentNode;
276 KoXmlStream bufferStream;
287KoXmlNodeData::KoXmlNodeData()
289 nodeType = KoXmlNode::NullNode;
291 tagName = TQString();
293 localName = TQString();
294 namespaceURI = TQString();
295 textData = TQString();
303 startPos = endPos = 0;
312KoXmlNodeData::~KoXmlNodeData()
317void KoXmlNodeData::clear()
320 for( KoXmlNodeData* node = first; node ; )
322 KoXmlNodeData* next = node->next;
327 nodeType = KoXmlNode::NullNode;
328 tagName = TQString();
330 namespaceURI = TQString();
331 textData = TQString();
345TQString KoXmlNodeData::text()
351 KoXmlNodeData* node = first;
354 switch( node->nodeType )
356 case KoXmlNode::ElementNode:
357 t += node->text();
break;
358 case KoXmlNode::TextNode:
359 t += node->data();
break;
360 case KoXmlNode::CDATASectionNode:
361 t += node->data();
break;
370TQString KoXmlNodeData::nodeName()
const
376 case KoXmlNode::ElementNode:
378 if (!prefix.isEmpty()) n.prepend(
":").prepend(prefix);
break;
379 case KoXmlNode::TextNode:
return TQString(
"#text");
380 case KoXmlNode::CDATASectionNode:
return TQString(
"#cdata-section");
381 case KoXmlNode::DocumentNode:
return TQString(
"#document");
388KoXmlNodeData* KoXmlNodeData::ownerDocument()
390 KoXmlNodeData* owner =
this;
392 while( owner->parent )
393 owner = owner->parent;
395 return (owner->nodeType==KoXmlNode::DocumentNode) ? owner : 0;
398void KoXmlNodeData::appendChild( KoXmlNodeData* node )
412void KoXmlNodeData::setAttribute(
const TQString& name,
const TQString& value )
414 attr[
name ] = value;
417TQString KoXmlNodeData::attribute(
const TQString& name )
422bool KoXmlNodeData::hasAttribute(
const TQString& name )
424 return attr.contains( name );
427void KoXmlNodeData::setAttributeNS(
const TQString& nsURI,
428const TQString& name,
const TQString& value )
431 TQString localName =
name;
432 int i =
name.find(
':' );
435 localName =
name.mid( i + 1 );
436 prefix =
name.left( i );
439 if( prefix.isNull() )
return;
441 DTQString key( nsURI, localName );
442 attrNS[ key ] = value;
445TQString KoXmlNodeData::attributeNS(
const TQString& nsURI,
const TQString& name )
447 DTQString key( nsURI, name );
448 return attrNS[ key ];
451bool KoXmlNodeData::hasAttributeNS(
const TQString& nsURI,
const TQString& name )
453 DTQString key( nsURI, name );
454 return attrNS.contains( key );
457TQString KoXmlNodeData::data()
const
462void KoXmlNodeData::setData(
const TQString& d )
467bool KoXmlNodeData::setContent( TQXmlInputSource* source,
468TQXmlReader* reader, TQString* errorMsg,
int* errorLine,
int* errorColumn )
470 if( nodeType != KoXmlNode::DocumentNode )
474 nodeType = KoXmlNode::DocumentNode;
477 if( !source )
return false;
478 if( !reader )
return false;
484 "http://xml.org/sax/features/namespaces",
485 "http://xml.org/sax/features/namespace-prefixes",
486 "http://trolltech.com/xml/features/report-whitespace-only-CharData",
487 "http://trolltech.com/xml/features/report-start-end-entity"
489 xmlReader =
new TQXmlSimpleReader;
490 for(
int fi=0; fi<4; fi++ )
491 xmlReader->setFeature( features[fi], reader->feature( features[fi] ) );
493 bool processNamespace =
494 reader->feature(
"http://xml.org/sax/features/namespaces" ) &&
495 !reader->feature(
"http://xml.org/sax/features/namespace-prefixes" );
497 KoXmlHandler handler(
this, processNamespace );
498 reader->setContentHandler( &handler );
499 reader->setErrorHandler( &handler );
500 reader->setLexicalHandler( &handler );
501 reader->setDeclHandler( &handler );
502 reader->setDTDHandler( &handler );
505 handler.setMaxDepth( 4 );
507 if( !reader->parse( source ) )
510 if( errorMsg ) *errorMsg = handler.errorMsg;
511 if( errorLine ) *errorLine = handler.errorLine;
512 if( errorColumn ) *errorColumn = handler.errorColumn;
519void KoXmlNodeData::loadChildren(
int depth )
522 if( ( depth== 1 ) && loaded )
return;
524 KoXmlNodeData* doc = ownerDocument();
528 if( doc->fastLoading )
return;
533 doc->xmlReader->feature(
"http://xml.org/sax/features/namespaces" ) &&
534 !doc->xmlReader->feature(
"http://xml.org/sax/features/namespace-prefixes" );
538 TQString snippet = doc->buffer.mid( startPos, endPos-startPos+1 );
541 KoXmlHandler handler(
this, nsProcess );
542 handler.setMaxDepth( depth );
543 handler.setInitialOffset( startPos );
544 doc->xmlReader->setContentHandler( &handler );
545 doc->xmlReader->setErrorHandler( &handler );
546 doc->xmlReader->setLexicalHandler( &handler );
547 doc->xmlReader->setDeclHandler( &handler );
548 doc->xmlReader->setDTDHandler( &handler );
550 TQXmlInputSource source;
551 source.setData( snippet );
552 if( !doc->xmlReader->parse( source ) )
557 tqWarning(
"On-demand loading triggers parse error!" );
563void KoXmlNodeData::unloadChildren()
565 if( !loaded )
return;
568 for( KoXmlNodeData* node = first; node ; )
570 KoXmlNodeData* next = node->next;
571 node->unloadChildren();
587KoXmlHandler::KoXmlHandler( KoXmlNodeData* n,
bool ns ):
590 processNamespace = ns;
595 entityName = TQString();
597 errorMsg = TQString();
605 bufferStream.setSaveData( rootNode->nodeType == KoXmlNode::DocumentNode );
608KoXmlHandler::~KoXmlHandler()
612bool KoXmlHandler::startDocument()
615 currentNode = rootNode;
617 entityName = TQString();
623bool KoXmlHandler::endDocument()
626 if( rootNode->nodeType == KoXmlNode::DocumentNode )
627 if( currentNode!=rootNode )
630 if( rootNode->nodeType == KoXmlNode::DocumentNode )
631 rootNode->buffer = bufferStream.stringData();
636bool KoXmlHandler::startDTD(
const TQString& name,
const TQString& publicId,
637const TQString& systemId )
640 Q_UNUSED( publicId );
641 Q_UNUSED( systemId );
647bool KoXmlHandler::startElement(
const TQString& nsURI,
const TQString& localName,
648const TQString& name,
const TQXmlAttributes& atts )
650 Q_UNUSED( localName );
659 TQString nodePrefix, nodeLocalName, nodeTagName;
660 KoXmlNodeData* element = 0;
662 if( processNamespace )
666 nodeLocalName =
name;
667 nodePrefix = nsURI.isNull() ? TQString() : TQString(
"");
668 int i =
name.find(
':' );
671 nodeTagName =
name.mid( i + 1 );
672 nodeLocalName = nodeTagName;
673 nodePrefix =
name.left( i );
676 if( elementDepth <= maxDepth )
679 element =
new KoXmlNodeData;
680 element->nodeType = KoXmlNode::ElementNode;
681 element->parent = currentNode;
682 element->namespaceURI = nsURI;
683 element->prefix = nodePrefix;
684 element->localName = nodeLocalName;
685 element->tagName = nodeTagName;
688 element->endPos = element->startPos = parseOffset + bufferStream.at();
691 for(
int c=0; c<atts.length(); c++ )
697 name = qName = atts.qName(c);
698 int i = qName.find(
':' );
699 if( i != -1 ) prefix = qName.left( i );
700 if( i != -1 )
name = qName.mid( i + 1 );
701 element->setAttributeNS( atts.uri(c), qName, atts.value(c) );
702 element->setAttribute( name, atts.value(c) );
707 if( ( rootNode->nodeType != KoXmlNode::DocumentNode ) || !rootNode->fastLoading )
710 if( !nodePrefix.isEmpty() )
711 bufferStream << nodePrefix <<
":";
712 bufferStream << localName;
713 bufferStream <<
" xmlns";
714 if( !nodePrefix.isEmpty() )
715 bufferStream <<
":" << nodePrefix;
716 bufferStream <<
"=\"";
717 bufferStream.appendEscape( nsURI );
718 bufferStream <<
"\"";
719 for( int c=0; c<atts.length(); c++ )
722 TQString name = atts.qName(c);
723 int i = name.find(
':' );
724 if( i != -1 ) prefix = name.left( i );
725 if( i != -1 ) name = atts.qName(c).mid( i + 1 );
726 if( !atts.uri(c).isEmpty() )
727 bufferStream <<
" xmlns:" << prefix <<
"=\"" << atts.uri(c) <<
"\"";
729 if( !prefix.isEmpty() ) bufferStream << prefix <<
":";
730 bufferStream << name <<
"=\"";
731 bufferStream.appendEscape( atts.value(c) );
732 bufferStream <<
"\"";
742 if( elementDepth <= maxDepth )
745 element =
new KoXmlNodeData;
746 element->nodeType = KoXmlNode::ElementNode;
747 element->parent = currentNode;
748 element->namespaceURI = TQString();
749 element->prefix = TQString();
750 element->localName = TQString();
751 element->tagName = nodeTagName;
753 if( rootNode->nodeType == KoXmlNode::DocumentNode )
754 element->fastLoading = rootNode->fastLoading;
757 element->endPos = element->startPos = parseOffset + bufferStream.at();
760 for(
int c=0; c<atts.length(); c++ )
761 element->setAttribute( atts.qName(c), atts.value(c) );
765 if( ( rootNode->nodeType != KoXmlNode::DocumentNode ) || !rootNode->fastLoading )
768 bufferStream << nodeTagName;
769 for(
int c=0; c<atts.length(); c++ )
771 bufferStream <<
" " << atts.qName(c) <<
"=\"";
772 bufferStream.appendEscape( atts.value(c) );
773 bufferStream <<
"\"";
785 if( elementDepth == 0 )
786 if( rootNode->nodeType != KoXmlNode::DocumentNode )
795 currentNode->loaded =
true;
796 currentNode->appendChild( element );
797 currentNode = element;
800 currentNode->loaded =
false;
805bool KoXmlHandler::endElement(
const TQString& nsURI,
const TQString& localName,
806const TQString& qName )
809 Q_UNUSED( localName );
812 if( !currentNode )
return false;
813 if( !currentNode->parent )
return false;
816 if( rootNode->nodeType == KoXmlNode::DocumentNode )
817 if( currentNode == rootNode )
821 if( ( rootNode->nodeType != KoXmlNode::DocumentNode ) || !rootNode->fastLoading )
822 bufferStream <<
"</" << qName <<
">";
825 currentNode->endPos = parseOffset + bufferStream.at() - 1;
828 if( elementDepth <= maxDepth )
829 currentNode = currentNode->parent;
837bool KoXmlHandler::characters(
const TQString& str )
840 if( rootNode->nodeType == KoXmlNode::DocumentNode )
841 if( currentNode == rootNode )
845 if( !entityName.isEmpty() )
855 if( elementDepth <= maxDepth )
857 KoXmlNodeData* cdata =
new KoXmlNodeData;
858 cdata->nodeType = KoXmlNode::CDATASectionNode;
859 cdata->parent = currentNode;
860 cdata->setData( str );
861 currentNode->appendChild( cdata );
864 if( ( rootNode->nodeType != KoXmlNode::DocumentNode ) || !rootNode->fastLoading )
865 bufferStream <<
"<![CDATA[" << str <<
"]]>";
870 if( elementDepth <= maxDepth )
872 KoXmlNodeData* text =
new KoXmlNodeData;
873 text->nodeType = KoXmlNode::TextNode;
874 text->parent = currentNode;
875 text->setData( str );
876 currentNode->appendChild( text );
880 if( ( rootNode->nodeType != KoXmlNode::DocumentNode ) || !rootNode->fastLoading )
881 bufferStream.appendEscape( str );
887bool KoXmlHandler::processingInstruction(
const TQString& target,
888const TQString& data )
894 KoXmlNodeData* instruction =
new KoXmlNodeData;
895 instruction->nodeType = KoXmlNode::ProcessingInstructionNode;
896 instruction->parent = currentNode;
897 instruction->tagName = target;
898 instruction->setData( data );
900 currentNode->appendChild( instruction );
905bool KoXmlHandler::skippedEntity(
const TQString& name )
913bool KoXmlHandler::startCDATA()
919bool KoXmlHandler::endCDATA()
925bool KoXmlHandler::startEntity(
const TQString& name )
931bool KoXmlHandler::endEntity(
const TQString& name )
934 entityName = TQString();
938bool KoXmlHandler::comment(
const TQString& comment )
946bool KoXmlHandler::unparsedEntityDecl(
const TQString &name,
947const TQString &publicId,
const TQString &systemId,
const TQString ¬ationName )
950 Q_UNUSED( publicId );
951 Q_UNUSED( systemId );
952 Q_UNUSED( notationName );
958bool KoXmlHandler::externalEntityDecl(
const TQString &name,
959const TQString &publicId,
const TQString &systemId )
962 Q_UNUSED( publicId );
963 Q_UNUSED( systemId );
969bool KoXmlHandler::notationDecl(
const TQString & name,
970const TQString & publicId,
const TQString & systemId )
973 Q_UNUSED( publicId );
974 Q_UNUSED( systemId );
980bool KoXmlHandler::fatalError(
const TQXmlParseException& exception )
982 errorMsg = exception.message();
983 errorLine = exception.lineNumber();
984 errorColumn = exception.columnNumber();
985 return TQXmlDefaultHandler::fatalError( exception );
995KoXmlNode::KoXmlNode()
997 d =
new KoXmlNodeData;
1001KoXmlNode::~KoXmlNode()
1007KoXmlNode::KoXmlNode(
const KoXmlNode& node )
1014KoXmlNode::KoXmlNode( KoXmlNodeData* data )
1030bool KoXmlNode::operator==(
const KoXmlNode& node )
const
1032 if( isNull() && node.isNull() )
return true;
1033 return( d==node.d );
1037bool KoXmlNode::operator!=(
const KoXmlNode& node )
const
1039 if( isNull() && !node.isNull() )
return true;
1040 if( !isNull() && node.isNull() )
return true;
1041 if( isNull() && node.isNull() )
return false;
1042 return( d!=node.d );
1045KoXmlNode::NodeType KoXmlNode::nodeType()
const
1050bool KoXmlNode::isElement()
const
1052 return d->nodeType == ElementNode;
1055bool KoXmlNode::isText()
const
1057 return (d->nodeType == TextNode) || isCDATASection();
1060bool KoXmlNode::isCDATASection()
const
1062 return d->nodeType == CDATASectionNode;
1065bool KoXmlNode::isDocument()
const
1067 return d->nodeType == DocumentNode;
1070bool KoXmlNode::isNull()
const
1072 return d->nodeType == NullNode;
1075void KoXmlNode::clear()
1078 d =
new KoXmlNodeData;
1081TQString KoXmlNode::nodeName()
const
1083 return d->nodeName();
1086TQString KoXmlNode::prefix()
const
1088 return isElement() ? d->prefix : TQString();
1091TQString KoXmlNode::namespaceURI()
const
1093 return isElement() ? d->namespaceURI : TQString();
1096TQString KoXmlNode::localName()
const
1098 return isElement() ? d->localName : TQString();
1103 KoXmlNodeData* node = d;
1104 while( node->parent ) node = node->parent;
1106 if( node->nodeType != DocumentNode )
return KoXmlDocument();
1107 return KoXmlDocument( node );
1112 return d->parent ? KoXmlNode( d->parent ) : KoXmlNode();
1115bool KoXmlNode::hasChildNodes()
const
1118 return d->first!=0 ;
1123 if( !d->fastLoading )
1125 return d->first ? KoXmlNode( d->first ) : KoXmlNode();
1130 if( !d->fastLoading )
1132 return d->last ? KoXmlNode( d->last ) : KoXmlNode();
1137 return d->next ? KoXmlNode( d->next ) : KoXmlNode();
1140KoXmlNode KoXmlNode::previousSibling()
const
1142 return d->prev ? KoXmlNode( d->prev ) : KoXmlNode();
1145KoXmlNode KoXmlNode::namedItem(
const TQString& name )
const
1147 if( !d->fastLoading )
1150 KoXmlNodeData* node = d->first;
1153 if( node->nodeName() == name )
1154 return KoXmlNode( node );
1162KoXmlNode KoXmlNode::namedItemNS(
const TQString& nsURI,
const TQString& name )
const
1164 if( !d->fastLoading )
1167 KoXmlNodeData* node = d->first;
1170 if( !node->prefix.isNull() )
1171 if( node->namespaceURI == nsURI )
1172 if( node->localName == name )
1173 return KoXmlNode( node );
1183 return isElement() ? KoXmlElement( d ) : KoXmlElement();
1188 return isText() ? KoXmlText( d ) : KoXmlText();
1193 return isCDATASection() ? KoXmlCDATASection( (KoXmlNodeData*)d ) :
1194 KoXmlCDATASection();
1199 return isDocument() ? KoXmlDocument( d ) : KoXmlDocument();
1204 d->loadChildren( depth );
1209 d->unloadChildren();
1219KoXmlElement::KoXmlElement():
KoXmlNode()
1222 d =
new KoXmlNodeData;
1225KoXmlElement::~KoXmlElement()
1239KoXmlElement::KoXmlElement( KoXmlNodeData* data ):
KoXmlNode()
1249 KoXmlNode::operator=( element );
1253bool KoXmlElement::operator== (
const KoXmlElement& element )
const
1255 if( isNull() || element.isNull() )
return false;
1256 return (d==element.d);
1259bool KoXmlElement::operator!= (
const KoXmlElement& element )
const
1261 if( isNull() && element.isNull() )
return false;
1262 if( isNull() || element.isNull() )
return true;
1263 return (d!=element.d);
1266TQString KoXmlElement::tagName()
const
1268 return isElement() ? ((KoXmlNodeData*)d)->tagName: TQString();
1271TQString KoXmlElement::text()
const
1276bool KoXmlElement::isElement()
const
1281TQString KoXmlElement::attribute(
const TQString& name )
const
1283 return attribute( name, TQString() );
1286TQString KoXmlElement::attribute(
const TQString& name,
1287const TQString& defaultValue )
const
1290 return defaultValue;
1292 if( !hasAttribute( name ) )
1293 return defaultValue;
1295 return ((KoXmlNodeData*)d)->attribute( name );
1298TQString KoXmlElement::attributeNS(
const TQString& namespaceURI,
1299const TQString& localName,
const TQString& defaultValue )
const
1302 return defaultValue;
1304 if( !hasAttributeNS( namespaceURI,localName ) )
1305 return defaultValue;
1307 return ((KoXmlNodeData*)d)->attributeNS( namespaceURI,localName );
1310bool KoXmlElement::hasAttribute(
const TQString& name )
const
1312 return isElement() ? ((KoXmlNodeData*)d)->hasAttribute( name ) :
false;
1315bool KoXmlElement::hasAttributeNS(
const TQString& namespaceURI,
1316const TQString& localName )
const
1318 return isElement() ? ((KoXmlNodeData*)d)->hasAttributeNS(
1319 namespaceURI, localName ) :
false;;
1331 d =
new KoXmlNodeData;
1332 d->nodeType = TextNode;
1335KoXmlText::~KoXmlText()
1344 d = (KoXmlNodeData*) text.d;
1348KoXmlText::KoXmlText( KoXmlNodeData* data ):
KoXmlNode()
1355bool KoXmlText::isText()
const
1360TQString KoXmlText::data()
const
1362 return ((KoXmlNodeData*)d)->data();
1367 KoXmlNode::operator=( element );
1377KoXmlCDATASection::KoXmlCDATASection():
KoXmlText()
1380 d =
new KoXmlNodeData;
1381 d->nodeType = KoXmlNode::CDATASectionNode;
1384KoXmlCDATASection::~KoXmlCDATASection()
1394 d = (KoXmlNodeData*) cdata.d;
1398KoXmlCDATASection::KoXmlCDATASection( KoXmlNodeData* cdata ):
1406bool KoXmlCDATASection::isCDATASection()
const
1413 KoXmlNode::operator=( cdata );
1423KoXmlDocument::KoXmlDocument():
KoXmlNode()
1426 d =
new KoXmlNodeData;
1427 d->nodeType = KoXmlNode::DocumentNode;
1430KoXmlDocument::~KoXmlDocument()
1436KoXmlDocument::KoXmlDocument( KoXmlNodeData* data ):
KoXmlNode()
1454 KoXmlNode::operator=( doc );
1459bool KoXmlDocument::operator==(
const KoXmlDocument& doc )
const
1465bool KoXmlDocument::operator!=(
const KoXmlDocument& doc )
const
1470bool KoXmlDocument::isDocument()
const
1477 for( KoXmlNodeData* node=d->first; node; )
1478 if( node->nodeType==KoXmlNode::ElementNode )
1479 return KoXmlElement( node );
1480 else node = node->next;
1482 return KoXmlElement();
1485void KoXmlDocument::setFastLoading(
bool f )
1490bool KoXmlDocument::fastLoading()
const
1492 return d->fastLoading;
1495bool KoXmlDocument::setContent( TQXmlInputSource *source, TQXmlReader *reader,
1496 TQString* errorMsg,
int* errorLine,
int* errorColumn )
1498 if( d->nodeType != KoXmlNode::DocumentNode )
1501 return d->setContent( source, reader, errorMsg, errorLine, errorColumn );
1505bool KoXmlDocument::setContent( TQIODevice* device, TQString* errorMsg,
1506int* errorLine,
int* errorColumn )
1508 return setContent( device,
false, errorMsg, errorLine, errorColumn );
1511bool KoXmlDocument::setContent( TQIODevice* device,
bool namespaceProcessing,
1512TQString* errorMsg,
int* errorLine,
int* errorColumn )
1514 if( d->nodeType != KoXmlNode::DocumentNode )
1517 TQXmlSimpleReader reader;
1518 reader.setFeature(
"http://xml.org/sax/features/namespaces", namespaceProcessing );
1519 reader.setFeature(
"http://xml.org/sax/features/namespace-prefixes", !namespaceProcessing );
1520 reader.setFeature(
"http://trolltech.com/xml/features/report-whitespace-only-CharData",
false );
1525 TQXmlInputSource source( device );
1526 return d->setContent( &source, &reader, errorMsg, errorLine, errorColumn );
1532const char* localName )
1534#ifdef KOXML_USE_TQDOM
1537 for ( ; !n.isNull(); n = n.nextSibling() ) {
1538 if ( n.isElement() && n.localName() == localName &&
1539 n.namespaceURI() == nsURI )
1540 return n.toElement();
1544 return node.namedItemNS( nsURI, localName).toElement();
1550#ifdef KOXML_USE_TQDOM
1562#ifdef KOXML_USE_TQDOM
KoXmlCDATASection represents a CDATA section in a DOM tree.
KoXmlDocument represents an XML document, structured in a DOM tree.
KoXmlElement represents a tag element in a DOM tree.
KoXmlNode represents a node in a DOM tree.
void load(int depth=1)
Loads all child nodes (if any) of this node.
void unload()
Releases all child nodes of this node.
KoXmlText represents a text in a DOM tree.
const char * name(StdAction id)
KOFFICECORE_EXPORT void unload(KoXmlNode &node)
Unload child nodes of specified node.
KOFFICECORE_EXPORT void load(KoXmlNode &node, int depth=1)
Explicitly load child nodes of specified node, up to given depth.
KOFFICECORE_EXPORT KoXmlElement namedItemNS(const KoXmlNode &node, const char *nsURI, const char *localName)
A namespace-aware version of TQDomNode::namedItem(), which also takes care of casting to a TQDomEleme...