/** * Copyright (C) 2016-2019 Michael Kourlas * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { IStringOptions } from "../options"; import XmlComment, { IXmlCommentOptions } from "./XmlComment"; import XmlDecl, { IXmlDeclOptions } from "./XmlDecl"; import XmlDtd, { IXmlDtdOptions } from "./XmlDtd"; import XmlElement, { IXmlElementOptions } from "./XmlElement"; import XmlProcInst, { IXmlProcInstOptions } from "./XmlProcInst"; /** * The options used to create a new document. */ export interface IXmlDocumentOptions { /** * Whether to throw an exception if basic XML validation fails while * building the document. */ validation?: boolean; } /** * Represents a document. * * A sample document is structured as follows: * * ```xml * * * * * My page title * * *

Welcome!

*

I hope you enjoy visiting my website.

* * * * ``` * * Each component of the document, such as the declaration, document type * definition, and root element, are children of this node. * * Documents must have exactly one element, which is the document's root * element. * * Documents can have exactly one declaration and one document type definition * in that order, so long as they precede the element. * * Documents can have an unlimited number of comments or processing * instructions, so long as they follow the declaration, if one exists. */ export default class XmlDocument { private readonly _children; private readonly _validation; constructor(options: IXmlDocumentOptions); /** * Adds a comment to this document and returns the new comment. */ comment(options: IXmlCommentOptions): XmlComment; /** * Adds a declaration to this document and returns the new declaration. */ decl(options?: IXmlDeclOptions): XmlDecl; /** * Adds a document type definition to this document and returns the new * document type definition. */ dtd(options: IXmlDtdOptions): XmlDtd; /** * Adds the root element to this document and returns the element. */ element(options: IXmlElementOptions): XmlElement; /** * Adds a processing instruction to this document and returns the new * processing instruction. */ procInst(options: IXmlProcInstOptions): XmlProcInst; /** * Returns an XML string representation of this document using the * specified options. */ toString(options?: IStringOptions): string; }