/** * Copyright (C) 2016 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 XmlAttribute from "./XmlAttribute"; import XmlCdata from "./XmlCdata"; import XmlCharData from "./XmlCharData"; import XmlCharRef from "./XmlCharRef"; import XmlComment from "./XmlComment"; import XmlEntityRef from "./XmlEntityRef"; import XmlNode from "./XmlNode"; import XmlProcInst from "./XmlProcInst"; /** * Represents an XML element. * * A sample XML element is structured as follows, where `{name}` is the name * of the element: * * ```xml * <{name} attname="attvalue"> * * * text * * ``` * * The `{name}` value is a property of the node, while the attributes and * children of the element (such as other elements, processing instructions, * and text) are children of this node. * * XmlElement nodes can have an unlimited number of {@link XmlAttribute}, * {@link XmlCdata}, {@link XmlCharRef}, {@link XmlComment}, * {@link XmlElement}, {@link XmlEntityRef}, {@link XmlProcInst}, or * {@link XmlCharData} nodes as children. */ export default class XmlElement extends XmlNode { private _name; /** * Initializes a new instance of the {@link XmlElement} class. * * @param name The name of the element. */ constructor(name: string); /** * Gets the name of the element. * * @returns The name of the element. */ /** * Sets the name of the element. * * @param name The name of the element. */ name: string; /** * Inserts an new attribute at the specified index. If no index is * specified, the node is inserted at the end of this node's children. * * @param name The name of the attribute. * @param value The value of the attribute. Strings are converted to * XmlAttributeText nodes. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns {XmlAttribute} The newly created attribute. */ attribute(name: string, value: string | XmlNode | Array, index?: number): XmlAttribute; /** * Returns an array containing all of the children of this node that are * instances of {@link XmlAttribute}. * * @returns An array containing all of the children of this node that are * instances of {@link XmlAttribute}. */ attributes(): XmlAttribute[]; /** * Inserts a new CDATA section at the specified index. If no index is * specified, the node is inserted at the end of this node's children. * * @param content The data of the CDATA section. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this node's * children. * * @returns The newly created CDATA section. */ cdata(content: string, index?: number): XmlCdata; /** * Inserts some character data at the specified index. If no index is * specified, the node is inserted at the end of this node's children. * * @param charData Character data. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns The newly created text node. */ charData(charData: string, index?: number): XmlCharData; /** * Inserts a new character reference at the specified index. If no index * is specified, the node is inserted at the end of this node's children. * * @param char The character to represent using the reference. * @param hex Whether to use the hexadecimal or decimal representation for * the reference. If left undefined, decimal is the default. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns The newly created character reference. */ charRef(char: string, hex?: boolean, index?: number): XmlCharRef; /** * Inserts a new comment at the specified index. If no index is specified, * the node is inserted at the end of this node's children. * * @param content The data of the comment. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns The newly created comment. */ comment(content: string, index?: number): XmlComment; /** * Inserts a new element at the specified index. If no index is specified, * the node is inserted at the end of this node's children. * * @param name The name of the element. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns The newly created element. */ element(name: string, index?: number): XmlElement; /** * Inserts a new entity reference at the specified index. If no index is * specified, the node is inserted at the end of this node's children. * * @param entity The entity to be referenced. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this * node's children. * * @returns The newly created entity reference. */ entityRef(entity: string, index?: number): XmlEntityRef; /** * Inserts the specified node into this node's children at the specified * index. The node is not inserted if it is already present. If this node * already has a parent, it is removed from that parent. * * Note that only {@link XmlAttribute}, {@link XmlCdata}, * {@link XmlCharRef}, {@link XmlComment}, {@link XmlElement}, * {@link XmlEntityRef}, {@link XmlProcInst}, or {@link XmlCharData} nodes * can be inserted; otherwise, an exception will be thrown. * * @param node The node to insert. * @param index The index at which to insert the node. Nodes at or after * the index are shifted to the right. If no index is * specified, the node is inserted at the end. * * @returns The node inserted into this node's children, or undefined if no * node was inserted. */ insertChild(node: XmlNode, index?: number): XmlNode | undefined; /** * Inserts a new processing instruction at the specified index. If no index * is specified, the node is inserted at the end of this node's children. * * @param target The target of the processing instruction. * @param content The data of the processing instruction, or undefined if * there is no target. * @param index The index at which the node should be inserted. If no index * is specified, the node is inserted at the end of this node's * children. * * @returns The newly created processing instruction. */ procInst(target: string, content?: string, index?: number): XmlProcInst; /** * Returns an XML string representation of this node. * * @param options Formatting options for the string representation. * * @returns An XML string representation of this node. */ toString(options?: IStringOptions): string; }