为什么我的程序 Return 字符串值采用 XML 格式?

Why My program Return String Value in XML format?

我正在使用 Web 服务,它 returns 是一个字符串值。但在我的输出中,该值采用 XML 格式:

String point = request.getParameter("point");
try {
  String latLonListCityNames = proxy.latLonListCityNames(new BigInteger(point));
  request.setAttribute("point", latLonListCityNames);
  System.out.println(latLonListCityNames);
} catch (RemoteException e) {
  e.printStackTrace();
}

我希望输出例如 "Oklahoma",但实际输出是:

<?xml version='1.0' ?>
<dwml version='1.0' xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
    <latLonList>
    <cityNameList>
        Oklahoma
    </cityNameList>
</dwml>

web-services 的回复通常(不总是)在 XML 中。如果您需要从 xml 字符串响应中提取所需格式的数据,例如 Java 对象 (POJO),您需要一个转换器,即编组和 Un-marshaling 数据。

简单的解决方案

使用JAXB.

什么是JAXBFrom wiki

Java Architecture for XML Binding (JAXB) is a software framework that allows Java developers to map Java classes to XML representations. JAXB provides two main features: the ability to marshal Java objects into XML and the inverse, i.e. to unmarshal XML back into Java objects.

它如何适合我的 use-case?

为您期望的响应类型创建一个简单的 POJO。然后使用 JAXB 转换器为您转换它们。

例如。如果您希望得到 cityName 的响应列表,您可以像下面这样创建您的 POJO..

CityModel.java

public Class CityModel {
    private List<String> cityName;
    // if more field required, add here.
}

示例 XML 响应应该是..

<ListOfCities>
    <CityName>My City</CityName>
    <CityName>Your City</CityName>
    <CityName>So Pity</CityName>
</ListOfCities>

然后,将此 xml 响应字符串传递给等效 Class 类型的 JAXB 绑定。即 CityModel.

这一切是怎么做到的?你能分享一些好的例子吗?

阅读 this tutorial 开始。

我对响应类型名称有疑问,它们没有很好地描述,我怎样才能用我想要的不同名称映射它们?

您可能需要查看下面的链接,它们的关键部分是调查更多关于 @XmlRootElement@XmlAttribute@XmlElement 等自定义配置的注释。

有几个更重要的链接可以在以后提供帮助?

convert xml to java object using jaxb (unmarshal)

Using JAXB for XML With Java

JAXB Unmarshalling Example: Converting XML into Object