当前位置: 首页 > 面试题库 >

java xml批注获取带有名称空间的字段, 值

易祯
2023-03-14
问题内容

我正在一个没有架构的项目中,我必须手动解析xml响应。我的问题是我无法使用xml注释获得一些价值。

例如,xml类似于:

<?xml version='1.0' encoding='UTF-8' ?>
<autnresponse>
    <action>QUERY</action>
    <response>SUCCESS</response>
    <responsedata>
        <autn:numhits>7</autn:numhits>
    </responsedata>
</autnresponse>

Java类是:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "autnresponse")
public class AutonomyResponse {
    private String action;
    private String response;
    private ResponseData responsedata;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responsedata")
public class ResponseData {
    @XmlElement(name = "numhits",namespace = "autn")
    private String numhits;
    @XmlElement(name = "totalhits")
    private String totalhits;
}

我可以获取操作和响应,但不能在responsedata中获取数字,有人可以告诉我如何处理<autn:numhits>using注释吗?太感谢了!

另一个问题是:我<autn:numhits>的响应数据中有多个…。如何获取Java代码中的所有值。
->我解决了多个相同的标签,只需设置List,注释将自动生成列表


问题答案:

事实是 autn- 仅是前缀,而不是名称空间。为了正确处理XML文档,必须声明名称空间。

正确的名称空间声明:

<?xml version='1.0' encoding='UTF-8' ?>
<autnresponse xmlns:autn="http://namespace.here">
    <action>QUERY</action>
    <response>SUCCESS</response>
    <responsedata>
        <autn:numhits>7</autn:numhits>
    </responsedata>
</autnresponse>

您还需要更改注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responsedata")
public class ResponseData {
    @XmlElement(name = "numhits",namespace = "http://namespace.here")
    private String numhits;
    @XmlElement(name = "totalhits")
    private String totalhits;
}

为您提供最终建议。如果您对此XML文档有xsd方案,请使用XJC utilit生成Java代码。

http://docs.oracle.com/javaee/5/tutorial/doc/bnbah.html



 类似资料:
  • 问题内容: 在Java中能否从实际字段中获取字符串中的字段名称?喜欢: PS:我 不是 在寻找字段的类/类名,也不是从String中的名称获取Field。 编辑:当我查看它时,我可能不需要一种获取字段名称的方法,该Field实例(来自字段的“代码名称”)就足够了。[例如] Java本身可能没有想要的东西。我将看一下ASM库,但最后我可能最终会使用字符串作为字段的标识符:/ EDIT2:我的英语不好

  • 我有一个包含大量成员的类,我想检查每个成员是否为null。我不想手动添加它,只要运行一个for循环(或类似的东西),每次添加一个字段时,它将遍历所有字段,而不需要“人工”添加。 到目前为止,我可以查看字段,并收到字段的名称(这是我所需要的)。然而,字段上并没有检查其值是否为null的内容。 以下是我目前掌握的情况: - 在此示例中,打印将为: 缺少名称1 缺少名称3

  • 问题内容: 我有一个来自遗留系统的悖论表,我需要对其进行单个查询。字段名称中包含空格-即“街道1”。当我尝试在delphi中仅对“街道1”字段制定查询时,出现错误- 关键字使用无效。令牌:1,行号:1 Delphi V7-对象Pascal,标准Tquery对象名称query1。 问题答案: 您需要在查询中为字符串加上表名的前缀。 例如:字段名称为“ Street 1”,表称为客户,选择为:

  • 我有一个来自外部endpoint的巨大XML响应。我想解析java类的XML响应。如果没有一个XML有名称空间,我就能够解析成相应的POJOS,直到那时一切都很好。 但是,响应可能仅在根元素中包含命名空间。例如,像这样 我可以保证没有一个内部xml元素会有更多的命名空间。 有没有办法实现这一点?我看到一些完全忽略命名空间的答案,但感觉不是很有说服力。有没有办法正确解析这些。 这是我为XML响应建模

  • 我已经建立了一个字段声明列表,需要找出每个字段的名称: 我找不到任何检索字段名称的方法。 奇怪的是,其中一个构造函数确实接受一个字段参数,所以不确定为什么它没有getter。我需要从另一个节点获取它吗? FieldDeclaration(节点列表修饰符、类型、字符串名称)创建一个FieldDeclaration。https://www.javadoc.io/doc/com.github.javap

  • 问题内容: 我有下一个XML: 如何获得此节点?我试过了 但它返回一个空数组。我该怎么做? 问题答案: 您需要确保XML解析器支持名称空间。 您还应该确保关闭,最好使用try-with-resources。