gpt4 book ai didi

java - 将 XML 解析为 Java 对象

转载 作者:行者123 更新时间:2023-12-02 09:14:33 27 4
gpt4 key购买 nike

我有一个xml:

<Link ID="6" Name="ALM_JIRA_BUG_2POSICIONGL">
<Endpoint ordinal="1">
<type>Micro-Focus-ALM</type>
<epName>Micro-Focus-ALM</epName>
<entityName>Defect</entityName>
<entityType>DEFECT</entityType>
<ConnectionData>
<username>sa_aplservmercury</username>
<password encryptInitString="p2yY5PjzSJs/pn5Kmzz/TQ=="
encrypted="true" value="Iwxz/rPt9elfoFxWSqnvfw=="/>
<Properties>
<property name="ServerURL" value="http://alm3.produban.gs.corp/qcbin"/>
<property name="Domain" value="QAF_SAN_AGILE"/>
<property name="Project" value="PG_ADN360"/>
</Properties>

</ConnectionData>

</Filters>
<Params/>
</Endpoint>
</Link>

还有这些解析类

@Data
public class PropertyXml {

@JacksonXmlProperty(isAttribute = false, localName = "property")
private String property;

@JacksonXmlProperty(isAttribute = true, localName = "name")
private String name;

@JacksonXmlProperty(isAttribute = true, localName = "value")
private String value;

}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Properties {

@JacksonXmlProperty(isAttribute = false, localName = "Properties")
@JacksonXmlElementWrapper(useWrapping = false)
List<PropertyXml> properties = new ArrayList<>();
}

@JacksonXmlRootElement(localName = "ConnectionData")
public class ConnectionData {

@JacksonXmlProperty(localName = "username")
private String userName;

@JacksonXmlProperty(localName = "password")
private Password password;

@JacksonXmlProperty(localName = "Properties")
private Properties properties;

}

@JacksonXmlRootElement(localName = "ConnectionData")
public class ConnectionData {

@JacksonXmlProperty(localName = "username")
private String userName;

@JacksonXmlProperty(localName = "password")
private Password password;

@JacksonXmlProperty(localName = "Properties")
private Properties properties;

}


public class Endpoint {

@JacksonXmlProperty(isAttribute = true, localName = "ordinal")
private String ordinal;

@JacksonXmlProperty(isAttribute = false, localName = "type")
private String type;

@JacksonXmlProperty(isAttribute = false, localName = "epName")
private String epName;

@JacksonXmlProperty(isAttribute = false, localName = "entityName")
private String entityName;

@JacksonXmlProperty(isAttribute = false, localName = "entityType")
private String entityType;

@JacksonXmlProperty(isAttribute = false, localName = "ConnectionData")
private ConnectionData connectionData;

@JacksonXmlProperty(isAttribute = false, localName = "Filters")
private String filters;

@JacksonXmlProperty(isAttribute = false, localName = "Params")
private String params;

}

public class Link {

@JacksonXmlProperty(isAttribute = true, localName = "ID")
private String id;

@JacksonXmlProperty(isAttribute = true, localName = "Name")
private String name;

@JacksonXmlProperty(isAttribute = false, localName = "Endpoint")
private Endpoint endpoint;
}

A través de este código leo el fichero y hago la deserialización:

服务等级:

@Service
public class ConvertToXmlJsonImpl implements ConvertToXmlJsonService {

public void convertFromXmlFile() {
File file = new File("C:/incremental.xml");
XmlMapper xmlMapper = new XmlMapper();
Link value = null;
//ConvertToXmlJsonModel value = null;
String xml = null;
try {
xml = inputStreamToString(new FileInputStream(file));
//value = xmlMapper.readValue(xml, ConvertToXmlJsonModel.class);
value = xmlMapper.readValue(xml, Link.class);
System.out.print(value);
} catch (IOException e) {
e.printStackTrace();
}

//return value;
}

private String inputStreamToString(FileInputStream fileInputStream) throws IOException {

StringBuilder sb = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(fileInputStream));
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
return sb.toString();
}

当使映射器返回异常时:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "name" (class com.example.convertToXmlJson.model.Properties), not marked as ignorable (one known property: "Properties"]) at [Source: (StringReader); line: 1, column: 567] (through reference chain: com.example.convertToXmlJson.model.Link["Endpoint"]->com.example.convertToXmlJson.model.Endpoint["ConnectionData"]->com.example.convertToXmlJson.model.ConnectionData["Properties"]->java.util.ArrayList[0]->com.example.convertToXmlJson.model.Properties["name"])

最佳答案

您的代码存在两个问题:

1) xml 格式不正确,标签过滤器没有开始标签:

<Link ID="6" Name="ALM_JIRA_BUG_2POSICIONGL">
<Endpoint ordinal="1">
<type>Micro-Focus-ALM</type>
<epName>Micro-Focus-ALM</epName>
<entityName>Defect</entityName>
<entityType>DEFECT</entityType>
<ConnectionData>
<username>sa_aplservmercury</username>
<password encryptInitString="p2yY5PjzSJs/pn5Kmzz/TQ=="
encrypted="true" value="Iwxz/rPt9elfoFxWSqnvfw=="/>
<Properties>
<property name="ServerURL" value="http://alm3.produban.gs.corp/qcbin"/>
<property name="Domain" value="QAF_SAN_AGILE"/>
<property name="Project" value="PG_ADN360"/>
</Properties>

</ConnectionData>

</Filters> <!-- there is no oppening tag for this one-->
<Params/>
</Endpoint>
</Link>

2)属性映射应按如下方式更正:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Properties {

@JacksonXmlProperty(isAttribute = false, localName = "property")
@JacksonXmlElementWrapper(useWrapping = false)
List<PropertyXml> properties = new ArrayList<>();
}

关于java - 将 XML 解析为 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59104344/

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