我目前正在使用JAXB替换旧系统,并且在解析XML时遇到问题。系统的首要要求是它必须是即插即用的替代品,因此我不能修改XML的格式。以下是给我麻烦的XML部分。
<xx>
<s1>
<X>-9999</X>
<Y>-9999</Y>
</s1>
<s2>
<X>-9999</X>
<Y>-9999</Y>
</s2>
</xx>
XML的问题在于,所有s#对象都是完全相同的,最多可以包含256个。JAXB中是否可以注释此类标记,还是必须创建256个单独的注释?非常感激任何的帮助。
这是xx对象的Java代码。注意:最初对对象进行编程时要理解只有2个s#对象,但是此后已更改。
@XmlRootElement(name="xx")
public class XMLXx implements Serializable {
private static final long serialVersionUID = 4064597372833234503L;
private XMLSite siteOne;
private XMLSite siteTwo;
@XmlElement(name="s1")
public XMLSite getSiteOne() {
return siteOne;
}
public void setSiteOne(XMLSite s1) {
this.siteOne = s1;
}
@XmlElement(name="s2")
public XMLSite getSiteTwo() {
return siteTwo;
}
public void setSiteTwo(XMLSite s2) {
this.siteTwo = s2;
}
}
这是XMLSite对象:
public class XMLSite implements Serializable {
private static final long serialVersionUID = -4374405403222014476L;
private Integer x;
private Integer y;
@XmlElement(name="X")
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
@XmlElement(name="Y")
public Integer getY() {
return y;
}
public void setY(Integer y) {
this.y = y;
}
}
如果要s#
作为集合处理这些项目:
import java.io.Serializable;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="xx")
public class XMLXx implements Serializable {
private static final long serialVersionUID = 4064597372833234503L;
private List<XMLSite> sites;
@XmlElement(name="s")
public List<XMLSite> getSites() {
return sites;
}
public void setSites(List<XMLSite> sites) {
this.sites = sites;
}
}
然后,你可以不喜欢愚弄JAXB以为所有元素(s1
,s2
等)实际上是被称为s
:
import java.io.FileInputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.util.StreamReaderDelegate;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(XMLXx.class);
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xsr = xif.createXMLStreamReader(new FileInputStream("input.xml"));
xsr = new SiteStreamReaderDelegate(xsr);
Unmarshaller unmarshaller = jc.createUnmarshaller();
XMLXx object = (XMLXx) unmarshaller.unmarshal(xsr);
System.out.println(object.getSites().size());
}
private static class SiteStreamReaderDelegate extends StreamReaderDelegate {
public SiteStreamReaderDelegate(XMLStreamReader xsr) {
super(xsr);
}
@Override
public String getLocalName() {
String localName = super.getLocalName();
if(localName.startsWith("s")) {
return "s";
}
return localName;
}
}
}
有关类似的示例,请参见:
问题内容: 我有看起来像这样的XML: 我想使用JAXB进行阅读。 我知道我能做 如果XML看起来像 ,但是我对上面的XML布局怎么办? 问题答案: 注意: 我是EclipseLink JAXB(MOXy)的负责人,并且是JAXB 2.X(JSR-222)专家组的成员。 您可以在此用例中使用MOXy的扩展名:
我正在尝试使用restTemplate(Spring)和Jackson 2.3.0构建一个JSON Web服务消费者 问题在于pojo的绑定,如下所示: Jackson输出以下错误: org.springframework.http.converter.HttpMessageNotReadableException:无法读取JSON:无法识别的字段"montant_TTC"(类com.bouygt
问题内容: 我正在使用具有以下功能的simplehtmldom: 我这样使用它: 有时,URL可能只是无效的,我想对此进行处理。我以为我可以使用try and catch,但是这没有用,因为它不会抛出异常,它只是给出了这样的php警告: 第39行在上面的代码中。 我如何正确处理此错误,我可以只使用普通条件,它看起来不像返回布尔值。 谢谢大家的帮助 更新资料 这是一个好的解决方案吗? 问题答案: 这
问题内容: 我正在使用JAXB动态生成XML。 现在,我想使用XSL将其转换为HTML。我该如何包括 在动态生成的XML中? 问题答案: 这里的所有解决方案都非常丑陋和冗长。只需在Mashaller对象内部设置一行即可指定其他标题。 本示例将使用样式表将对象输出到文件,并很好地格式化元素以供人类阅读。该对象属于类,并将被写入file,并由给出的样式表设置格式: 更新资料 在最新版本的JAXB中,我
问题内容: 我是一名初级软件工程师,曾负责接管旧系统。根据我的初步评估,该系统存在几个问题。 意大利面代码 重复码 10k行及以上的课程 使用log4j滥用和过度记录 错误的数据库表设计 缺少源代码管理->我为此设置了Subversion 缺少文档->除了阅读代码外,我对业务规则一无所知 我应该如何处理才能提高系统质量并解决此类问题?我可以考虑使用静态代码分析软件来解决任何不良的编码做法。 但是,
问题内容: 在我的一个项目中,我有两个“数据传输对象” RecordType1和RecordType2,它们从RecordType的抽象类继承。 我希望两个RecordType对象在“ process”方法中由相同的RecordProcessor类处理。我的第一个想法是创建一个通用的处理方法,该方法将两个特定的处理方法委托给以下人员: 我读过Scott Meyers在 Effective C ++