XmlDomDocument::XmlDomDocument(const QByteArray& xmlFileContent, const FilePath& filepath) throw (Exception) : mFilePath(filepath), mRootElement(nullptr) { QDomDocument doc; doc.implementation().setInvalidDataPolicy(QDomImplementation::ReturnNullNode); QString errMsg; int errLine; int errColumn; if (!doc.setContent(xmlFileContent, &errMsg, &errLine, &errColumn)) { QString line = xmlFileContent.split('\n').at(errLine-1); throw RuntimeError(__FILE__, __LINE__, QString("%1: %2 [%3:%4] LINE:%5") .arg(filepath.toStr(), errMsg).arg(errLine).arg(errColumn).arg(line), QString(tr("Error while parsing XML in file \"%1\": %2 [%3:%4]")) .arg(filepath.toNative(), errMsg).arg(errLine).arg(errColumn)); } // check if the root node exists QDomElement root = doc.documentElement(); if (root.isNull()) { throw RuntimeError(__FILE__, __LINE__, QString(), QString(tr("No XML root node found in \"%1\"!")).arg(/*xmlFilePath.toNative()*/QString())); } mRootElement = XmlDomElement::fromQDomElement(root, this); }
QDomImplementation QDomDocumentProto::implementation() const { QDomDocument *item = qscriptvalue_cast<QDomDocument*>(thisObject()); if (item) return item->implementation(); return QDomImplementation(); }
QByteArray XmlDomDocument::toByteArray() const noexcept { QDomDocument doc; doc.implementation().setInvalidDataPolicy(QDomImplementation::ReturnNullNode); doc.setContent(QString("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")); doc.appendChild(mRootElement->toQDomElement(doc)); return doc.toByteArray(4); }