我想定义一个java类,然后使用JAXB将其实例编组为xml文件。
我想要的输出如下:
<paths>
<path action="R" kind="file" copyfrom-path="file1" copyto-path="file2">file2</path>
<path action="M" kind="file">file3</path>
</paths>
我定义了一个java类,如下所示:
@XmlRootElement(name = "paths")
@XmlAccessorType(FIELD)
public class changed_paths
{
private List<String> path;
public changed_paths()
{
path = new ArrayList<String>();
}
public List<String> getPath()
{
return path;
}
public void setPath(List<String> path)
{
this.path = path;
}
public void addPath(String p)
{
path.add(p);
}
}
使用上面的java类,我可以生成没有<path></path>
元素属性的输出xml文件。如下所示:
<paths>
<path>file2</path>
<path>file3</path>
</paths>
我尝试在changed_paths类中定义属性,如下所示:
@XmlAttribute
private String kind;
public void setKind(String kind){
this.kind = kind;
}
public String getKind(){
return this.kind;
}
但是这会在标记<paths></paths>
中输出属性为“kind”的xml文件,但不会在其嵌套的<path></path>
标记中输出。
另一个问题是,当属性名称包含“ - ”(例如copyfrom-path)时,java将不允许我在其名称中使用“ - ”来定义这些变量。
有人可以告诉我如何定义:
1. <path></path>
中的属性?
2.名字中带有“ - ”的属性?
有人可以帮我一下吗?
非常感谢你!
答案 0 :(得分:0)
我找到了答案。要为<path></path>
创建属性,我为此标记定义了类路径。并为<paths></paths>
定义了另一个类路径。
要在名称中创建带“ - ”的属性,我使用注释@XmlAttribute(name = "copyfrom-path")
@XmlAccessorType(FIELD)
public class path
{
@XmlAttribute
private String kind;
@XmlAttribute
private String action;
@XmlAttribute(name = "copyfrom-path")
private String copyfrom;
@XmlAttribute(name = "copyfrom-rev")
private String copyto;
@XmlValue
private String value;
public void setKind(String kind)
{
this.kind = kind;
}
public String getKind()
{
return this.kind;
}
public void setAction(String action)
{
this.action = action;
}
public String getAction()
{
return this.action;
}
public void setValue(String value)
{
this.value = value;
}
public String getValue()
{
return this.value;
}
public void setCopyfrom(String p)
{
this.copyfrom = p;
}
public String getCopyfrom()
{
return this.copyfrom;
}
public void setCopyto(String p)
{
this.copyto = p;
}
public String getCopyto()
{
return this.copyto;
}
}
@XmlRootElement(name = "paths")
@XmlAccessorType(FIELD)
public class paths
{
private List<path> paths;
public paths()
{
paths = new ArrayList<path>();
}
public List<path> getPaths()
{
return paths;
}
public void setPaths(List<path> paths)
{
this.paths = paths;
}
public void addPath(path p)
{
paths.add(p);
}
}