Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » JDOM User »

Re: [jdom-interest] How to replace an Element with Text?

Brad Cox

2004-03-28

Replies:

Thanks! That was exactly the problem. But the solution still eludes.

After rewriting like this: (no such class as Parent, and Element
doesn't do indexOf()):

    Element parent = e.getParent();
    List siblings = parent.getChildren();
    int index = siblings.indexOf(e);
        Text t = new Text("#radioElement('"+nameAttr+"'
'"+valueAttr+"' '"+buf+"')");
    siblings.set(index, t);

I get this error:
org.jdom.IllegalAddException: Filter won't allow index 0 to be set to
org.jdom.Text at
org.jdom.ContentList$FilterList.set(ContentList.java:835)
Looks like JDOM is onto this and is determined to stop it. Time for
bigger hammers? ;)

At 10:25 PM -0600 3/27/04, Bradley S. Huffman wrote:
>Brad Cox writes:
>
>> I've an XHTML processing application that supports persistent forms.
>> It needs to rewrite some elements (<input type="radio"> and <option>
>> elements, for example) as text elements (velocity macro calls that
>> add checked="checked" attributes).
>>
>> For example
>>  <input type="radio" ... > must be rewritten as #radioElement(...)
>>  <option>Value</option>  must be rewritten as #optionElement(...)
>> with suitable attributes and arguments of course.
>>
>> First try (iteration over the List returned by XPath) didn't work
>> because you can only delete elements, not replace them.
>
>The list return from XPath isn't "live" so changes to it are not reflected
>back in the tree.
>
>> Second try was index through list and use set(index, new Text(...))
>> to replace elements. That approach didn't work either. Debugger
>> showed that the list was modified propertly, but the changes didn't
>> affect the underlying DOM, just the list.
>>
>> Can someone explain why #2 didn't work and what I can do to fix it? Thanks!
>
>Same reason. Try this, index throught the list and
>
>   Element element = (Element) xpath_result.get(i); // Assumes xpath returned
>                                    // only Elements
>   Parent parent = element.getParent();         // get the
>element's parent
>   int index = parent.indexOf(element);         // and element's index
>   parent.setContent(index, "#radioElement ...");  // replace it
>
>Brad
>
>Go Pokes!!!
>_______________________________________________
>To control your jdom-interest membership:
>http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@(protected)


--
Brad J. Cox, PhD, 703 361 4751, http://virtualschool.edu
    http://virtualschool/ale Action Learning Environment
http://virtualschool.edu/mybank Digital Rights Management System
  http://virtualschool.edu/jco Java Cryptographic Objects (JCO)
 http://virtualschool.edu/jwaa Java Web Application Architecture (JWAA)
http://virtualschool.edu/java+ Java Preprocessor (Java+)
_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@(protected)
©2008 junlu.com - Jax Systems, LLC, U.S.A.