You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Ben Weidig (Jira)" <ji...@apache.org> on 2026/06/27 07:52:00 UTC
[jira] [Resolved] (TAP5-2827) DOM types should support XPath, better navigation/mutation
[ https://issues.apache.org/jira/browse/TAP5-2827?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ben Weidig resolved TAP5-2827.
------------------------------
Fix Version/s: 5.10.0
Resolution: Implemented
> DOM types should support XPath, better navigation/mutation
> ----------------------------------------------------------
>
> Key: TAP5-2827
> URL: https://issues.apache.org/jira/browse/TAP5-2827
> Project: Tapestry 5
> Issue Type: Improvement
> Components: tapestry-core
> Affects Versions: 5.10.0
> Reporter: Ben Weidig
> Assignee: Ben Weidig
> Priority: Minor
> Fix For: 5.10.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
>
> h2. Description
> The types in {{org.apache.tapestry5.dom}} only allow rudimentary lookups/navigation/mutability.
> To improve versatility, we should include "the usual suspects" of tree-based XML data structures:
> * XPath (inspired by [https://tapestryxpath.sourceforge.net|https://tapestryxpath.sourceforge.net/]))
> * Sibling navigation
> * Mutability (clone, detach, replace)
> * Improved Visitor
> h2. XPath
> Even though the JDK includes w3c XPath support, it is more of a timecapsule with certain quirks.
> That's why Jaxen 2.0.0 would be used.
> [https://tapestryxpath.sourceforge.net|https://tapestryxpath.sourceforge.net/] was based on Jaxen 1.0.0 but the principle is the same, we need DocumentNavigator.
> There will be an {{XPath}} type that share instances, which accepts {{{}Node{}}}.
> But to make it more versatile, there will also be an {{xpath(String)}} method on the {{Node}} type itself, creating a {{BoundXPath}} with the node as its origin, creating a nicer fluent API:
>
> {code:java}
> XPath.of("ul/li").selectElements(element)
> vs
> element.xpath("ul/li").elements()
> {code}
>
> h2. Sibling Navigation
> Adding {{getNextSibling()}} and {{getPreviousSibling())}} to {{Node}} and its implementations
> h2. Mutability
> We can already remove nodes, but not detach them, so {{detach()}} gets added.
> With detached nodes, we also need insert/append/replace-related methods.
> h2. Improved Visitor
> Currently, the {{org.apache.tapestry5.dom.Visitor}} only supports {{Element}} nodes.
> If possible in a non-breaking way, it should be expanded to visit all {{Node}} types.
> If not, a new {{NodeVisitor}} could be added.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)