您好帮助请把xml文件放在里面一些相同的元素,这些元素的内容不同,“name”属性。这些元素有不同的项目集,如何进行解咒?断续器:
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
<service-broker>
<adapters>
<adapter name=\"cdb\">
<protocol>JDBC</protocol>
<datasource>CdbAdapterDS</datasource>
</adapter>
<adapter name=\"fmss-sc\">
<protocol>BBBC</protocol>
<fleet-uc18-reason-codes>
<code>2</code>
<code>3</code>
</fleet-uc18-reason-codes>
</adapter>
</adapters>
</service-broker>
我需要在Cdb和FmssSc中执行对象2的解组。我的尝试:通用元素-ServiceBroker.class
package jax;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "service-broker")
@XmlAccessorType(XmlAccessType.FIELD)
public class ServiceBroker {
@XmlElement(name = "adapters")
private Adapters adapters;
public Adapters getAdapters() {
return adapters;
}
public void setAdapters(Adapters adapters) {
this.adapters = adapters;
}
}
适配器.class
package jax;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
@XmlAccessorType(XmlAccessType.FIELD)
class Adapters {
@XmlElement
private Cdb cdb;
@XmlElement
private FmssSc fmssSc;
public Cdb getCdb() {
return cdb;
}
public void setCdb(Cdb cdb) {
this.cdb = cdb;
}
public FmssSc getFmssSc() {
return fmssSc;
}
public void setFmssSc(FmssSc fmssSc) {
this.fmssSc = fmssSc;
}
}
Cdb.class
package jax;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
@XmlAccessorType(XmlAccessType.FIELD)
class Cdb {
@XmlElement(name = "protocol")
private String protocol;
@XmlElement(name = "datasource")
private String datasource;
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public String getDatasource() {
return datasource;
}
public void setDatasource(String datasource) {
this.datasource = datasource;
}
}
FmssSc.class
package jax;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
@XmlAccessorType(XmlAccessType.FIELD)
class FmssSc {
@XmlElement(name = "protocol")
private String protocol;
@XmlElementWrapper(name = "fleet-uc18-reason-codes")
@XmlElement(name = "code")
private List<String> code = new ArrayList<>();
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public List<String> getCode() {
return code;
}
public void setCode(List<String> code) {
this.code = code;
}
}
演示:
package jax;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class Jax {
public static final String adapter =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<service-broker>" +
"<adapters>" +
"<adapter name=\"cdb\">" +
"<protocol>JDBC</protocol>" +
"<datasource>CdbAdapterDS</datasource>" +
"</adapter>" +
"<adapter name=\"fmss-sc\">" +
"<protocol>BBBC</protocol>" +
"<fleet-uc18-reason-codes>" +
"<code>2</code>" +
"<code>3</code>" +
"</fleet-uc18-reason-codes>" +
"</adapter>" +
"</adapters>" +
"</service-broker>";
public static void main(String[] args) throws JAXBException {
Jax jax = new Jax();
jax.shouldUnmarshallAdapter();
}
public void shouldUnmarshallAdapter() throws JAXBException {
StringReader reader = new StringReader(adapter);
JAXBContext context = JAXBContext.newInstance(ServiceBroker.class);
Unmarshaller u = context.createUnmarshaller();
ServiceBroker sb = (ServiceBroker) u.unmarshal(reader);
System.out.println(sb.getAdapters().getCdb().getProtocol());
}
}
错误:
Exception in thread "main" java.lang.NullPointerException
at jax.Jax.shouldUnmarshallAdapter(Jax.java:39)
at jax.Jax.main(Jax.java:31)
XML中的标记名“adapter”在您的Java类中没有对应的标记名,即“Adapters”类中没有具有该名称的成员,所以实际上所有带有该标记的XML都将被忽略,因此Adapters实例中的变量cdb为空,因此..NPE。并且:Jaxb绝不会使用XML中的属性“name”将所有子标记映射到cdb或fmssSc成员。您的Java代码将映射到以下结构的XML:
<service-Broker>
<adapters>
<cdb>
<protocol>
<datasource>
<fmssSc>
<protocol>
....
有太多关于大致相同主题的问题,但我找不到我想要的。如果我错过了,我很抱歉。 我正在尝试散集具有公共逻辑元素但使用不同标记定义的XML文件: 两个<代码> 我可以这样做: 所需要的只是在和中实现并分别返回或。 然而,在中有一个属性并以某种方式告诉JAXB将这两个字段映射到它似乎更简单。 我是不是想多了?你将如何实现它? (当然,我无法控制输入XML。如果可能的话,我还想避免使用MOXy的解决方案,因
我有下面的xml结构: 有不同的 Field(X) 包装器元素,它们包含相同的用户元素。XML 中可以发送 n 个字段。因此,我不能为每个单独的Jaxb。我需要访问用户,但在取消编组步骤后忽略 Field 元素。不幸的是,我无权更改xml结构。我无法找到解决方案。任何指针都会有所帮助。
我有这种结构的xml文件: 有没有可能将这种XML解组到一个对象中。问题是每个元素都有一些独特的标签。我想把这些值放到列表中,但是我不知道怎么做。
这是我的xml结构 因此,我尝试使用JAXB解组将这个xml绑定到一个类,但结果一无所获。 我在想,我有两个基本元素,课程和科目,所以我根据这些元素建立了两个类 此选项用于控制课程标签 这是为了控制主题标签。 我做了一些字符串函数,结果什么都没有。有什么问题吗?
我正在尝试解组一个包含多个同名元素的XML文档。我不确定是否需要创建bean的Arraylist并将其传递给解组器。我希望有人能给我一些建议来解决这个问题。我试图解析的XML是一个SOAP响应,但我去掉了信封,所以我只有它的主体,它看起来是这样的: 这是从一个包含50多个字段的表返回的,但我创建了一个testBean,并且我定义了fkdevice只是为了使其简单,我的bean看起来像这样: 这给了
使用selenium web驱动程序来自动化测试,在我们的应用程序元素(3个输入字段)中xpath是相同的,所以我不能传递这三个字段中的值,请查找html