⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 element.java

📁 一个用于搜索本地文件内容的小型搜索引擎
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
     * and all other markup is stripped out.)
     *
     * @return a concatentation of all text node descendants
     */
    public String getValue() {
        final StringBuffer buffer = new StringBuffer();

        final Iterator iter = getContent().iterator();
        while (iter.hasNext()) {
            final Content child = (Content) iter.next();
            if (child instanceof Element || child instanceof Text) {
                buffer.append(child.getValue());
            }
        }
        return buffer.toString();
    }

    /**
     * Returns whether this element is a root element. This can be used in
     * tandem with {@link #getParent} to determine if an element has any
     * "attachments" to a parent element or document.
     *
     * @return                     whether this is a root element
     */
    public boolean isRootElement() {
        return parent instanceof Document;
    }

    public int getContentSize() {
        return content.size();
    }

    public int indexOf(final Content child) {
        return content.indexOf(child);
    }

//    private int indexOf(int start, Filter filter) {
//        int size = getContentSize();
//        for (int i = start; i < size; i++) {
//            if (filter.matches(getContent(i))) {
//                return i;
//            }
//        }
//        return -1;
//    }


    /**
     * Returns the textual content directly held under this element as a string.
     * This includes all text within this single element, including whitespace
     * and CDATA sections if they exist. It's essentially the concatenation of
     * all {@link Text} and {@link CDATA} nodes returned by {@link #getContent}.
     * The call does not recurse into child elements. If no textual value exists
     * for the element, an empty string is returned.
     *
     * @return                     text content for this element, or empty
     *                             string if none
     */
    public String getText() {
        if (content.size() == 0) {
            return "";
        }

        // If we hold only a Text or CDATA, return it directly
        if (content.size() == 1) {
            final Object obj = content.get(0);
            if (obj instanceof Text) {
                return ((Text) obj).getText();
            }
            else {
                return "";
            }
        }

        // Else build String up
        final StringBuffer textContent = new StringBuffer();
        boolean hasText = false;

        for (int i = 0; i < content.size(); i++) {
            final Object obj = content.get(i);
            if (obj instanceof Text) {
                textContent.append(((Text) obj).getText());
                hasText = true;
            }
        }

        if (!hasText) {
            return "";
        }
        else {
            return textContent.toString();
        }
    }

    /**
     * Returns the textual content of this element with all surrounding
     * whitespace removed. If no textual value exists for the element, or if
     * only whitespace exists, the empty string is returned.
     *
     * @return                     trimmed text content for this element, or
     *                             empty string if none
     */
    public String getTextTrim() {
        return getText().trim();
    }

    /**
     * Returns the textual content of this element with all surrounding
     * whitespace removed and internal whitespace normalized to a single space.
     * If no textual value exists for the element, or if only whitespace exists,
     * the empty string is returned.
     *
     * @return                     normalized text content for this element, or
     *                             empty string if none
     */
    public String getTextNormalize() {
        return Text.normalizeString(getText());
    }

    /**
     * Returns the textual content of the named child element, or null if
     * there's no such child. This method is a convenience because calling
     * <code>getChild().getText()</code> can throw a NullPointerException.
     *
     * @param  name                the name of the child
     * @return                     text content for the named child, or null if
     *                             no such child
     */
    public String getChildText(final String name) {
        final Element child = getChild(name);
        if (child == null) {
            return null;
        }
        return child.getText();
    }

    /**
     * Returns the trimmed textual content of the named child element, or null
     * if there's no such child. See <code>{@link #getTextTrim()}</code> for
     * details of text trimming.
     *
     * @param  name                the name of the child
     * @return                     trimmed text content for the named child, or
     *                             null if no such child
     */
    public String getChildTextTrim(final String name) {
        final Element child = getChild(name);
        if (child == null) {
            return null;
        }
        return child.getTextTrim();
    }

    /**
     * Returns the normalized textual content of the named child element, or
     * null if there's no such child. See <code>{@link
     * #getTextNormalize()}</code> for details of text normalizing.
     *
     * @param  name                the name of the child
     * @return                     normalized text content for the named child,
     *                             or null if no such child
     */
    public String getChildTextNormalize(final String name) {
        final Element child = getChild(name);
        if (child == null) {
            return null;
        }
        return child.getTextNormalize();
    }

    /**
     * Returns the textual content of the named child element, or null if
     * there's no such child.
     *
     * @param  name                the name of the child
     * @param  ns                  the namespace of the child
     * @return                     text content for the named child, or null if
     *                             no such child
     */
    public String getChildText(final String name, final Namespace ns) {
        final Element child = getChild(name, ns);
        if (child == null) {
            return null;
        }
        return child.getText();
    }

    /**
     * Returns the trimmed textual content of the named child element, or null
     * if there's no such child.
     *
     * @param  name                the name of the child
     * @param  ns                  the namespace of the child
     * @return                     trimmed text content for the named child, or
     *                             null if no such child
     */
    public String getChildTextTrim(final String name, final Namespace ns) {
        final Element child = getChild(name, ns);
        if (child == null) {
            return null;
        }
        return child.getTextTrim();
    }

    /**
     * Returns the normalized textual content of the named child element, or
     * null if there's no such child.
     *
     * @param  name                the name of the child
     * @param  ns                  the namespace of the child
     * @return                     normalized text content for the named child,
     *                             or null if no such child
     */
    public String getChildTextNormalize(final String name, final Namespace ns) {
        final Element child = getChild(name, ns);
        if (child == null) {
            return null;
        }
        return child.getTextNormalize();
    }

    /**
     * Sets the content of the element to be the text given. All existing text
     * content and non-text context is removed. If this element should have both
     * textual content and nested elements, use <code>{@link #setContent}</code>
     * instead. Setting a null text value is equivalent to setting an empty
     * string value.
     *
     * @param  text                 new text content for the element
     * @return                      the target element
     * @throws IllegalDataException if the assigned text contains an illegal
     *                              character such as a vertical tab (as
     *                              determined by {@link
     *                              org.jdom.Verifier#checkCharacterData})
     */
    public Element setText(final String text) {
        content.clear();

        if (text != null) {
            addContent(new Text(text));
        }

        return this;
    }

    /**
     * This returns the full content of the element as a List which
     * may contain objects of type <code>Text</code>, <code>Element</code>,
     * <code>Comment</code>, <code>ProcessingInstruction</code>,
     * <code>CDATA</code>, and <code>EntityRef</code>.
     * The List returned is "live" in document order and modifications
     * to it affect the element's actual contents.  Whitespace content is
     * returned in its entirety.
     *
     * <p>
     * Sequential traversal through the List is best done with an Iterator
     * since the underlying implement of List.size() may require walking the
     * entire list.
     * </p>
     *
     * @return a <code>List</code> containing the mixed content of the
     *         element: may contain <code>Text</code>,
     *         <code>{@link Element}</code>, <code>{@link Comment}</code>,
     *         <code>{@link ProcessingInstruction}</code>,
     *         <code>{@link CDATA}</code>, and
     *         <code>{@link EntityRef}</code> objects.
     */
    public List getContent() {
        return content;
    }

    /**
     * Return a filter view of this <code>Element</code>'s content.
     *
     * <p>
     * Sequential traversal through the List is best done with a Iterator
     * since the underlying implement of List.size() may require walking the
     * entire list.
     * </p>
     *
     * @param filter <code>Filter</code> to apply
     * @return <code>List</code> - filtered Element content
     */
    public List getContent(final Filter filter) {
        return content.getView(filter);
    }

    /**
     * Removes all child content from this parent.
     *
     * @return list of the old children detached from this parent
     */
    public List removeContent() {
        final List old = new ArrayList(content);
        content.clear();
        return old;
    }

    /**
     * Remove all child content from this parent matching the supplied filter.
     *
     * @param filter filter to select which content to remove
     * @return list of the old children detached from this parent
     */
    public List removeContent(final Filter filter) {
        final List old = new ArrayList();
        final Iterator iter = content.getView(filter).iterator();
        while (iter.hasNext()) {
            final Content child = (Content) iter.next();
            old.add(child);
            iter.remove();
        }
        return old;
    }

    /**
     * This sets the content of the element.  The supplied List should
     * contain only objects of type <code>Element</code>, <code>Text</code>,
     * <code>CDATA</code>, <code>Comment</code>,
     * <code>ProcessingInstruction</code>, and <code>EntityRef</code>.
     *
     * <p>
     * When all objects in the supplied List are legal and before the new
     * content is added, all objects in the old content will have their
     * parentage set to null (no parent) and the old content list will be
     * cleared. This has the effect that any active list (previously obtained
     * with a call to {@link #getContent} or {@link #getChildren}) will also
     * change to reflect the new content.  In addition, all objects in the
     * supplied List will have their parentage set to this element, but the
     * List itself will not be "live" and further removals and additions will
     * have no effect on this elements content. If the user wants to continue
     * working with a "live" list, then a call to setContent should be
     * followed by a call to {@link #getContent} or {@link #getChildren} to
     * obtain a "live" version of the content.
     * </p>
     *
     * <p>
     * Passing a null or empty List clears the existing content.
     * </p>
     *
     * <p>
     * In event of an exception the original content will be unchanged and
     * the objects in the supplied content will be unaltered.
     * </p>
     *
     * @param newContent <code>Collection</code> of content to set
     * @return this element modified
     * @throws IllegalAddException if the List contains objects of
     *         illegal types or with existing parentage.
     */
    public Element setContent(final Collection newContent) {
        content.clearAndSet(newContent);
        return this;
    }

    /**
     * Replace the current child the given index with the supplied child.
     * <p>
     * In event of an exception the original content will be unchanged and
     * the supplied child will be unaltered.
     * </p>
     *
     * @param index - index of child to replace.
     * @param child - child to add.
     * @return element on which this method was invoked
     * @throws IllegalAddException if the supplied child is already attached
     *                             or not legal content for this parent.
     * @throws IndexOutOfBoundsException if index is negative or greater
     *         than the current number of children.
     */
    public Element setContent(final int index, final Content child) {
        content.set(index, child);
        return this;
    }

    /**
     * Replace the child at the given index whith the supplied
     * collection.
     * <p>
     * In event of an exception the original content will be unchanged and
     * the content in the supplied collection will be unaltered.
     * </p>
     *
     * @param index - index of child to replace.
     * @param newContent - <code>Collection</code> of content to replace child.
     * @return object on which this method was invoked
     * @throws IllegalAddException if the collection contains objects of
     *         illegal types.
     * @throws IndexOutOfBoundsException if index is negative or greater
     *         than the current number of children.
     */
    public Parent setContent(final int index, final Collection newContent) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -