gpt4 book ai didi

java - 使用 JAXB 解码 XML 后无法获取正确的值

转载 作者:行者123 更新时间:2023-11-30 04:20:06 26 4
gpt4 key购买 nike

我有以下 XML 文件,当我使用下面的 JAVA 代码解码以下 XML 时。

我没有获得案例管理器标签值。我使用 Innovation.getCasemanager() 获取,我得到 NULL 值。实际上,应该返回“dhacksta@umich.edu”值。

我实际上遇到了这个问题,因为案例管理器标签包含 XML 属性。如果它不包含 XML 属性,那么我可以获得案例管理器的正确值。

XML 文件:

<innovation file_number="0269">
<title>3D Static Strength Prediction Program</title>
<brief_description>3D Static Strength Prediction Program</brief_description>
<categories/>
<tags>
<tag>Healthcare</tag>
<tag>Manufacturing</tag>
<tag>_Other</tag>
</tags>
<full_description>test</full_description>
<case_manager first_name="Doug" last_name="Hockstad">dhocksta@umich.edu</case_manager>
<status>Published</status>
</innovation>

JAVA代码:

Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setSchema(schema);

unmarshaller.setEventHandler(validation);
Innovations innovation = (Innovations) unmarshaller.unmarshal(xmlSourceFileName);

创新.java

package com.test.innovation.validation;
@XmlRootElement(name = "innovations")
public class Innovations {

private String organization;
private List<Innovation> innovationList = new ArrayList<Innovation>();

/**
* @return the organization
*/
@XmlElement(name = "organization")
public String getOrganization() {
return organization;
}

/**
* @param organization
* the organization to set
*/
public void setOrganization(String organization) {
this.organization = organization;
}

/**
* @return the innovationList
*/
@XmlElement(name = "innovation")
public List<Innovation> getInnovationList() {
return innovationList;
}

/**
* @param innovationList
* the innovationList to set
*/
public void setInnovationList(List<Innovation> innovationList) {
this.innovationList = innovationList;
}

public void printRecord() {
int i = 0;
for (Innovation innovation : innovationList) {
i++;
String str = "";
System.out.println("-----------------------------------------------------------------------");
str = "\nFileNumber : " + innovation.getFileNumber();
str += "\nTitle : " + innovation.getTitle();
str += "\nBriefDescription : " + innovation.getBriefDescription();

if (innovation.getCategories() != null) {
if (innovation.getCategories().getCategoryList() != null) {
str += "\nCategories : " +
innovation.getCategories().getCategoryList().toString();
}
}

if (innovation.getTags() != null) {
if (innovation.getTags().getTagList() != null) {
str += "\nTags : " + innovation.getTags().getTagList().toString();
}
}

str += "\nFullDescription : " + innovation.getFullDescription();
str += "\nCaseManager : " + innovation.getCaseManager();
str += "\nFirstName : " + innovation.getCaseManager().getFirstName();
str += "\nLastName : " + innovation.getCaseManager().getLastName();
str += "\nStatus : " + innovation.getStatus();

if (innovation.getPatentNumber() != null) {
str += "\nPatentNumberInformation : " + innovation.getPatentNumber().toString();
}
if (innovation.getPatentStatus() != null) {
str += "\nPatentStatusInformation : " + innovation.getPatentStatus().toString();
}
str += "\nOrganizationName : " + getOrganization();
System.out.println("Record Number " + i + " :: " + str);
System.out.println("");
}
}

}

创新.java

package com.test.innovation.validation;
@XmlType
public class Innovation {

private String fileNumber;
private String title;
private String briefDescription;
private String fullDescription;
private List<String> patentNumber = new ArrayList<String>();
private List<String> patentStatus = new ArrayList<String>();
private CaseManager caseManager;
private Categories categories;
private Tags tags;
private String status;

/**
* @return the fileNumber
*/
@XmlAttribute(name = "file_number")
public String getFileNumber() {
return fileNumber;
}

/**
* @param fileNumber
* the fileNumber to set
*/
public void setFileNumber(String fileNumber) {
this.fileNumber = fileNumber;
}

/**
* @return the title
*/
@XmlElement(name = "title")
public String getTitle() {
return title;
}

/**
* @param title
* the title to set
*/
public void setTitle(String title) {
this.title = title;
}

/**
* @return the briefDescription
*/
@XmlElement(name = "brief_description")
public String getBriefDescription() {
return briefDescription;
}

/**
* @param briefDescription
* the briefDescription to set
*/
public void setBriefDescription(String briefDescription) {
this.briefDescription = briefDescription;
}

/**
* @return the fullDescription
*/
@XmlElement(name = "full_description")
public String getFullDescription() {
return fullDescription;
}

/**
* @param fullDescription
* the fullDescription to set
*/
public void setFullDescription(String fullDescription) {
this.fullDescription = fullDescription;
}

/**
* @return the caseManager
*/
@XmlElement(name = "case_manager")
public CaseManager getCaseManager() {
return caseManager;
}

/**
* @param caseManager
* the caseManager to set
*/
public void setCaseManager(CaseManager caseManager) {
this.caseManager = caseManager;
}

/**
* @return the status
*/
@XmlElement(name = "status")
public String getStatus() {
return status;
}

/**
* @param status
* the status to set
*/
public void setStatus(String status) {
this.status = status;
}

/**
* @return the categories
*/
@XmlElement(name = "categories")
public Categories getCategories() {
return categories;
}

/**
* @param categories
* the categories to set
*/
public void setCategories(Categories categories) {
this.categories = categories;
}

/**
* @return the tags
*/
@XmlElement(name = "tags")
public Tags getTags() {
return tags;
}

/**
* @param tags
* the tags to set
*/
public void setTags(Tags tags) {
this.tags = tags;
}

/**
* @return the patentNumber
*/
@XmlElement(name = "patent_number")
public List<String> getPatentNumber() {
return patentNumber;
}

/**
* @param patentNumber
* the patentNumber to set
*/
public void setPatentNumber(List<String> patentNumber) {
this.patentNumber = patentNumber;
}

/**
* @return the patentStatus
*/
@XmlElement(name = "patent_status")
public List<String> getPatentStatus() {
return patentStatus;
}

/**
* @param patentStatus
* the patentStatus to set
*/
public void setPatentStatus(List<String> patentStatus) {
this.patentStatus = patentStatus;
}

}

CaseManager.java

package com.test.innovation.validation;

import javax.xml.bind.annotation.XmlAttribute;

public class CaseManager {

private String firstName;
private String lastName;

/**
* @return the firstName
*/
@XmlAttribute(name = "first_name")
public String getFirstName() {
return firstName;
}

/**
* @param firstName
* the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}

/**
* @return the lastName
*/
@XmlAttribute(name = "last_name")
public String getLastName() {
return lastName;
}

/**
* @param lastName
* the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}

}

最佳答案

我认为在“CaseManager”类中使用 @XmlValue 注释声明变量会对您有所帮助。
欲了解更多信息,请查看这些链接。
1.XML element with attribute and content using JAXB
2.How to parse <foo value1="a" value2="b">value3</foo> with JAXB?

关于java - 使用 JAXB 解码 XML 后无法获取正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com