Element occur more than once (unmarshall no namespace xml)

View: New views
2 Messages — Rating Filter:   Alert me  

Element occur more than once (unmarshall no namespace xml)

by cesarAugusto :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi everybody.
 
I´m trying to unmarshall an xml file with no namespace, I have the structure bellow in that file:
<a>
    <b>
        <c>
            <name index=1>NameOne</name>
            <name index=2>NameTwo</name>
            <name index=3>NameThree</name>
        </c>
    </b>
</a>
 
So I need to assign the second occur(NameTwo) of the tag name to a String property in my class "Dog", the property's name is "name".
 
My Class is something like this:
 
public class Dog{
  private String name;
  public Dog(){
   
  }
  public String getName(){
    return this.name;
  }
  public void setName(String name){
    this.name = name;
  }
 
Finally my mapping.xml have the follow structure to unmarshall the xml file.
 
<class name="Dog">
  <map-to xml="a"/>
 
  <field name="name" type="java.lang.String">
    <bind-xml name="name" node="element" location="b/c"/>
  </field>
</class>
 
If I try to unmarshaller the xml file with that Structorure Castor throw me an exception tell me "Element "name" occur more than once".
 
The key point that is in the line ( <bind-xml name="name" node="element" location="b/c"/> ) How can I tell to castor that I need the second occur of name
(  <name index=2>NameTwo</name> )?
 
I can't change the xml to put a nameSpace, when I used DOM whith XPATH I would use a XPATH like this: "a/b/c/name[position()=2]". there is any way to do something like this with castor.
 
Thanks in advance.
 
CesarGuzman.
 
 

Re: Element occur more than once (unmarshall no namespace xml)

by Werner Guttmann-6 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Cesar,

I am afraid that that won't be able with Castor - for several reasons,
that is.

a) Provided the mapping you are using, the XML does not match the
structure you have defined in your mapping. Your field mapping

<field name="name" type="java.lang.String">
  <bind-xml name="name" node="element" location="b/c"/>
</field>

indicates that the 'name' property of your Dog class does not allow
multi-valuedness. That's your first break.

b) You are slightly mis-interpreting the location attribute. This
attribute is designed to allow pre-pending XML artefacts that you do not
want to have in your Java POJOs. It is a structural element only, and
not designed to be used to identify specific occurrences of XML
artefacts at run-time.

Regards
Werner

Cesar Guzman wrote:

> Hi everybody.
>
> I´m trying to unmarshall an xml file with no namespace, I have the structure
> bellow in that file:
> <a>
>     <b>
>         <c>
>             <name index=1>NameOne</name>
>             <name index=2>NameTwo</name>
>             <name index=3>NameThree</name>
>         </c>
>     </b>
> </a>
>
> So I need to assign the second occur(NameTwo) of the tag name to a String
> property in my class "Dog", the property's name is "name".
>
> My Class is something like this:
>
> public class Dog{
>   private String name;
>   public Dog(){
>
>   }
>   public String getName(){
>     return this.name;
>   }
>   public void setName(String name){
>     this.name = name;
>   }
> }
>
> Finally my mapping.xml have the follow structure to unmarshall the xml file.
>
> <class name="Dog">
>   <map-to xml="a"/>
>
>   <field name="name" type="java.lang.String">
>     <bind-xml name="name" node="element" location="b/c"/>
>   </field>
> </class>
>
> If I try to unmarshaller the xml file with that Structorure Castor throw me
> an exception tell me "Element "name" occur more than once".
>
> The key point that is in the line ( <bind-xml name="name" node="element"
> location="b/c"/> ) How can I tell to castor that I need the second occur of
> name
> (  <name index=2>NameTwo</name> )?
>
> I can't change the xml to put a nameSpace, when I used DOM whith XPATH I
> would use a XPATH like this: "a/b/c/name[position()=2]". there is any way to
> do something like this with castor.
>
> Thanks in advance.
>
> CesarGuzman.
>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email