package org.jsoup.nodes;

import org.jsoup.internal.StringUtil;
import org.jsoup.helper.Validate;

import java.io.IOException;

A text node.
Author:Jonathan Hedley, jonathan@hedley.net
/** A text node. @author Jonathan Hedley, jonathan@hedley.net */
public class TextNode extends LeafNode {
Create a new TextNode representing the supplied (unencoded) text).
Params:
  • text – raw text
See Also:
/** Create a new TextNode representing the supplied (unencoded) text). @param text raw text @see #createFromEncoded(String) */
public TextNode(String text) { value = text; }
Create a new TextNode representing the supplied (unencoded) text).
Params:
  • text – raw text
  • baseUri – base uri - ignored for this node type
See Also:
Deprecated:use TextNode(String)
/** Create a new TextNode representing the supplied (unencoded) text). @param text raw text @param baseUri base uri - ignored for this node type @see #createFromEncoded(String, String) @deprecated use {@link TextNode#TextNode(String)} */
public TextNode(String text, String baseUri) { this(text); } public String nodeName() { return "#text"; }
Get the text content of this text node.
See Also:
Returns:Unencoded, normalised text.
/** * Get the text content of this text node. * @return Unencoded, normalised text. * @see TextNode#getWholeText() */
public String text() { return StringUtil.normaliseWhitespace(getWholeText()); }
Set the text content of this text node.
Params:
  • text – unencoded text
Returns:this, for chaining
/** * Set the text content of this text node. * @param text unencoded text * @return this, for chaining */
public TextNode text(String text) { coreValue(text); return this; }
Get the (unencoded) text of this text node, including any newlines and spaces present in the original.
Returns:text
/** Get the (unencoded) text of this text node, including any newlines and spaces present in the original. @return text */
public String getWholeText() { return coreValue(); }
Test if this text node is blank -- that is, empty or only whitespace (including newlines).
Returns:true if this document is empty or only whitespace, false if it contains any text content.
/** Test if this text node is blank -- that is, empty or only whitespace (including newlines). @return true if this document is empty or only whitespace, false if it contains any text content. */
public boolean isBlank() { return StringUtil.isBlank(coreValue()); }
Split this text node into two nodes at the specified string offset. After splitting, this node will contain the original text up to the offset, and will have a new text node sibling containing the text after the offset.
Params:
  • offset – string offset point to split node at.
Returns:the newly created text node containing the text after the offset.
/** * Split this text node into two nodes at the specified string offset. After splitting, this node will contain the * original text up to the offset, and will have a new text node sibling containing the text after the offset. * @param offset string offset point to split node at. * @return the newly created text node containing the text after the offset. */
public TextNode splitText(int offset) { final String text = coreValue(); Validate.isTrue(offset >= 0, "Split offset must be not be negative"); Validate.isTrue(offset < text.length(), "Split offset must not be greater than current text length"); String head = text.substring(0, offset); String tail = text.substring(offset); text(head); TextNode tailNode = new TextNode(tail); if (parent() != null) parent().addChildren(siblingIndex()+1, tailNode); return tailNode; } void outerHtmlHead(Appendable accum, int depth, Document.OutputSettings out) throws IOException { if (out.prettyPrint() && ((siblingIndex() == 0 && parentNode instanceof Element && ((Element) parentNode).tag().formatAsBlock() && !isBlank()) || (out.outline() && siblingNodes().size()>0 && !isBlank()) )) indent(accum, depth, out); boolean normaliseWhite = out.prettyPrint() && parent() instanceof Element && !Element.preserveWhitespace(parent()); Entities.escape(accum, coreValue(), out, false, normaliseWhite, false); } void outerHtmlTail(Appendable accum, int depth, Document.OutputSettings out) {} @Override public String toString() { return outerHtml(); }
Create a new TextNode from HTML encoded (aka escaped) data.
Params:
  • encodedText – Text containing encoded HTML (e.g. &lt;)
  • baseUri – Base uri
Returns:TextNode containing unencoded data (e.g. <)
Deprecated:use createFromEncoded(String) instead, as LeafNodes don't carry base URIs.
/** * Create a new TextNode from HTML encoded (aka escaped) data. * @param encodedText Text containing encoded HTML (e.g. &amp;lt;) * @param baseUri Base uri * @return TextNode containing unencoded data (e.g. &lt;) * @deprecated use {@link TextNode#createFromEncoded(String)} instead, as LeafNodes don't carry base URIs. */
public static TextNode createFromEncoded(String encodedText, String baseUri) { String text = Entities.unescape(encodedText); return new TextNode(text); }
Create a new TextNode from HTML encoded (aka escaped) data.
Params:
  • encodedText – Text containing encoded HTML (e.g. &lt;)
Returns:TextNode containing unencoded data (e.g. <)
/** * Create a new TextNode from HTML encoded (aka escaped) data. * @param encodedText Text containing encoded HTML (e.g. &amp;lt;) * @return TextNode containing unencoded data (e.g. &lt;) */
public static TextNode createFromEncoded(String encodedText) { String text = Entities.unescape(encodedText); return new TextNode(text); } static String normaliseWhitespace(String text) { text = StringUtil.normaliseWhitespace(text); return text; } static String stripLeadingWhitespace(String text) { return text.replaceFirst("^\\s+", ""); } static boolean lastCharIsWhitespace(StringBuilder sb) { return sb.length() != 0 && sb.charAt(sb.length() - 1) == ' '; } }