Class XmlTool
- java.lang.Object
-
- org.apache.velocity.tools.generic.SafeConfig
-
- org.apache.velocity.tools.generic.XmlTool
-
- All Implemented Interfaces:
java.io.Serializable
@DefaultKey("xml") public class XmlTool extends SafeConfig implements java.io.Serializable
Tool for reading/navigating XML files, with XPath expressions support.
Configuration parameters:
resource=file or classpath resourcesource=URL
Here's a short example:
XML file: <foo><bar>woogie</bar><a name="test"/></foo> Template: $foo.bar.text $foo.find('a') $foo.a.name Output: woogie <a name="test"/> test Configuration: <tools> <toolbox scope="application"> <tool class="org.apache.velocity.tools.generic.XmlTool" key="foo" source="doc.xml"/> </toolbox> </tools>Note that this tool is included in the default GenericTools configuration under the key "xml". You can read but unless you set safeMode="false" for it, you will only be able to parse XML strings. Safe mode is on by default and blocks access to the
read(String)method.- Since:
- VelocityTools 2.0
- Version:
- $Revision: 1769055 $ $Date: 2006-11-27 10:49:37 -0800 (Mon, 27 Nov 2006) $
- Author:
- Nathan Bubna, Claude Brisson
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classXmlTool.NodeIteratorIterator implementation that wraps a Node list iterator to return new XmlTool instances for each item in the wrapped iterator.s
-
Field Summary
Fields Modifier and Type Field Description protected ImportSupportimportSupportImportSupport utility which provides underlying i/o-
Fields inherited from class org.apache.velocity.tools.generic.SafeConfig
LOCK_CONFIG_KEY, log, LOGGER_NAME_KEY, SAFE_MODE_KEY, USE_CLASS_LOGGER_KEY
-
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description java.lang.Stringattr(java.lang.Object o)Returns the value of the specified attribute for the first/soleNodein the internal Node list for this instance, if that Node is anElement.java.util.Map<java.lang.String,java.lang.String>attributes()Returns aMapof all attributes for the first/soleNodeheld internally by this instance.XmlToolchildren()Returns a newXmlToolinstance that wraps all the childElements of all the current internally held nodes that areElements themselves.protected voidconfigure(ValueParser values)Configuration.XmlToolfetch(java.lang.String url)Reads and parses a remote or local URLXmlToolfind(java.lang.Object o)Converts the specified object to a String and callsfind(String)with that.XmlToolfind(java.lang.String xpath)Performs an XPath selection on the current set ofNodes held by this instance and returns a newXmlToolinstance that wraps those results.XmlToolget(java.lang.Number n)Returns anXmlToolthat wraps the specifiedNodefrom this instance's internal Node list.java.lang.Objectget(java.lang.Object o)This will first attempt to find an attribute with the specified name and return its value.XmlToolgetFirst()Returns anXmlToolthat wraps only the firstNodefrom this instance's internal Node list.XmlToolgetLast()Returns anXmlToolthat wraps only the lastNodefrom this instance's internal Node list.java.lang.ObjectgetName()Asksget(Object)for a "name" result.java.lang.StringgetNodeName()Returns the name of the root node.java.lang.StringgetNodePath()Returns the XPath that identifies the first/soleNoderepresented by this instance.XmlToolgetParent()Returns a newXmlToolinstance that wraps the parentElementof the first/soleNodebeing wrapped by this instance.java.lang.StringgetPath()Deprecated.use getNodePath()java.lang.StringgetText()Returns the concatenated text content of all the internally held nodes.protected voidinitializeImportSupport(ValueParser config)ImportSupport initializationbooleanisEmpty()Returnstrueif there are noNodes internally held by this instance.java.util.Iterator<XmlTool>iterator()Returns anIteratorthat returns newXmlToolinstances for eachNodeheld internally by this instance.org.w3c.dom.Nodenode()Returns the first/soleNodefrom this instance's internal Node list, if any.XmlToolparents()Returns a newXmlToolinstance that wraps the parentElements of each of theNodes being wrapped by this instance.XmlToolparse(java.lang.String xml)Parses the given XML string and uses the resultingDocumentas the rootNode.XmlToolread(java.lang.String resource)Reads and parses a local resource fileprotected voidsetRoot(org.w3c.dom.Node node)Sets a singular rootNodefor this instance.intsize()Returns the number ofNodes internally held by this instance.java.lang.StringtoString()If this instance has no XMLNodes, then this returns the result ofsuper.toString().-
Methods inherited from class org.apache.velocity.tools.generic.SafeConfig
configure, getLog, initLogger, isConfigLocked, isSafeMode, setLockConfig, setSafeMode
-
-
-
-
Field Detail
-
importSupport
protected transient ImportSupport importSupport
ImportSupport utility which provides underlying i/o
-
-
Constructor Detail
-
XmlTool
public XmlTool()
Default constructor.
-
XmlTool
public XmlTool(org.w3c.dom.Node node)
Builds an XmlTool around a node.- Parameters:
node- target node
-
XmlTool
public XmlTool(java.util.List<org.w3c.dom.Node> nodes)
Builds an XmlTool around a nodes list.- Parameters:
nodes- nodes list
-
-
Method Detail
-
initializeImportSupport
protected void initializeImportSupport(ValueParser config)
ImportSupport initialization- Parameters:
config- configuration values
-
configure
protected void configure(ValueParser values)
Configuration.- Overrides:
configurein classSafeConfig- Parameters:
values- configuration values
-
setRoot
protected void setRoot(org.w3c.dom.Node node)
Sets a singular rootNodefor this instance.- Parameters:
node- new root node
-
parse
public XmlTool parse(java.lang.String xml)
Parses the given XML string and uses the resultingDocumentas the rootNode.- Parameters:
xml- XML string- Returns:
- new XmlTool
-
read
public XmlTool read(java.lang.String resource)
Reads and parses a local resource file- Parameters:
resource- resource path- Returns:
- new XmlTool
-
fetch
public XmlTool fetch(java.lang.String url)
Reads and parses a remote or local URL- Parameters:
url- resource URL- Returns:
- new XmlTool
-
get
public java.lang.Object get(java.lang.Object o)
This will first attempt to find an attribute with the specified name and return its value. If no such attribute exists or its value isnull, this will attempt to convert the given value to aNumberand get the result ofget(Number). If the number conversion fails, then this will convert the object to a string. If that string does not contain a '/', it appends the result ofgetPath()and a '/' to the front of it. Finally, it delegates the string to thefind(String)method and returns the result of that.- Parameters:
o- attribute name, number, xpath relative expression- Returns:
- found value or null
-
getName
public java.lang.Object getName()
Asksget(Object)for a "name" result. If none, this will return the result ofgetNodeName().- Returns:
- found value or null
-
getNodeName
public java.lang.String getNodeName()
Returns the name of the root node. If the internalNodelist has more than oneNode, it will only return the name of the first node in the list.- Returns:
- node name
-
getPath
@Deprecated public java.lang.String getPath()
Deprecated.use getNodePath()Returns the XPath that identifies the first/sole
Noderepresented by this instance.This function is deprecated. In future versions, this function will first try
get("path")before resorting togetNodePath().- Returns:
- xpath node path
-
getNodePath
public java.lang.String getNodePath()
Returns the XPath that identifies the first/soleNoderepresented by this instance.- Returns:
- xpath node path
- Since:
- 3.2
-
attr
public java.lang.String attr(java.lang.Object o)
Returns the value of the specified attribute for the first/soleNodein the internal Node list for this instance, if that Node is anElement. If it is a non-Element node type or there is no value for that attribute in this element, then this will returnnull.- Parameters:
o- attribute name- Returns:
- attribute value or null
-
attributes
public java.util.Map<java.lang.String,java.lang.String> attributes()
Returns aMapof all attributes for the first/soleNodeheld internally by this instance. If that Node is not anElement, this will return null.- Returns:
- attributes map
-
isEmpty
public boolean isEmpty()
Returnstrueif there are noNodes internally held by this instance.- Returns:
- whether the set of current nodes is empty
-
size
public int size()
Returns the number ofNodes internally held by this instance.- Returns:
- the size of the set of current nodes
-
iterator
public java.util.Iterator<XmlTool> iterator()
Returns anIteratorthat returns newXmlToolinstances for eachNodeheld internally by this instance.- Returns:
- an iterator on wrappers of current nodes or null
-
getFirst
public XmlTool getFirst()
Returns anXmlToolthat wraps only the firstNodefrom this instance's internal Node list.- Returns:
- a wrapper on the first node or null
-
getLast
public XmlTool getLast()
Returns anXmlToolthat wraps only the lastNodefrom this instance's internal Node list.- Returns:
- a wrapper on the last node or null
-
get
public XmlTool get(java.lang.Number n)
Returns anXmlToolthat wraps the specifiedNodefrom this instance's internal Node list.- Parameters:
n- node index in current nodes list- Returns:
- a wrapper on the nth node or null
-
node
public org.w3c.dom.Node node()
Returns the first/soleNodefrom this instance's internal Node list, if any.- Returns:
- the unwrapped first node or null
-
find
public XmlTool find(java.lang.Object o)
Converts the specified object to a String and callsfind(String)with that.- Parameters:
o- xpath to search- Returns:
- a wrapper on found nodes or null
-
find
public XmlTool find(java.lang.String xpath)
Performs an XPath selection on the current set ofNodes held by this instance and returns a newXmlToolinstance that wraps those results. If the specified value is null or this instance does not currently hold any nodes, then this will returnnull. If the specified value, when converted to a string, does not contain a '/' character, then it has "//" prepended to it. This means that a call to$xml.find("a")is equivalent to calling$xml.find("//a"). The full range of XPath selectors is supported here.- Parameters:
xpath- xpath to search- Returns:
- a wrapper on found nodes or null
-
getParent
public XmlTool getParent()
Returns a newXmlToolinstance that wraps the parentElementof the first/soleNodebeing wrapped by this instance.- Returns:
- wrapper on the parent of the first node or null
-
parents
public XmlTool parents()
Returns a newXmlToolinstance that wraps the parentElements of each of theNodes being wrapped by this instance. This does not return all ancestors, just the immediate parents.- Returns:
- a wrapper on the set of parents nodes or null
-
children
public XmlTool children()
Returns a newXmlToolinstance that wraps all the childElements of all the current internally held nodes that areElements themselves.- Returns:
- a wrapper on the children of current nodes
-
getText
public java.lang.String getText()
Returns the concatenated text content of all the internally held nodes. Obviously, this is most useful when only one node is held.- Returns:
- text of current nodes or null
-
toString
public java.lang.String toString()
If this instance has no XMLNodes, then this returns the result ofsuper.toString(). Otherwise, it returns the XML (as a string) of all the internally held nodes that are notAttributes. For attributes, only the value is used.- Overrides:
toStringin classjava.lang.Object- Returns:
- XML string of current nodes or null
-
-