【问题标题】:Not well formatted xml JAXB格式不正确的 xml JAXB
【发布时间】:2012-05-19 19:43:49
【问题描述】:

我尝试使用 JAXB 注释发送和 xml 文件,但我看到节点具有这种格式:

<:subject xmlns="http://www..." xmlns:atom="http://www.w3.org/2005/atom">
 <:data>maths<:data>
</:subject>

而不是这个:

<subject xmlns="http://www..." xmlns:atom="http://www.w3.org/2005/atom">
 <data>maths<data>
</subject>

我不明白为什么会这样。从哪里插入 : 符号,为什么? T

My model has this form:


@XmlRootElement(name="subject")
@XmlAccessorType(XmlAccessType.FIELD)
public class Registration {

   private String data;

    get/set
}

我的 package-info.java:

  @javax.xml.bind.annotation.XmlSchema (
   namespace="http://www..",
   elementFormDefault=XmlNsForm.QUALIFIED,
xmlns = { 
  @javax.xml.bind.annotation.XmlNs( prefix=" ", namespaceURI="http://www..."),
  @javax.xml.bind.annotation.XmlNs( prefix="atom" ,namespaceURI="http://www.w3.org/2005/atom")
})

 package mypackage.affil;

 import javax.xml.bind.annotation.XmlNsForm;

我的看法:

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
 <%@ page language="java" contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html">
<title>Insert title here</title>
</head>
<body>

<h1>Create New Person</h1>

<c:url var="takeinto" value="/takedata" />
<form:form modelAttribute="takedataAttribute" method="POST" action="${takeinto}">
<table>
    <tr>
        <td><form:label path="data">Affiliation</form:label></td>
        <td><form:input path="data"/></td>
    </tr>

谁能告诉我为什么符号 : 出现?

【问题讨论】:

  • 这在我创建的另一个项目中工作,但现在不行!我真的无法理解。
  • 在您的 package-info 中,您的前缀设置为“”,尝试将其更改为“”(不带空格)。

标签: xml spring spring-mvc jaxb


【解决方案1】:

你在那里触发了一个奇怪的错误!我的猜测是问题出在这里(我已经删除了 Java 命名空间名称,您可以在 package-info.java 中通过在 package 声明之后放入正确的 import 语句来执行此操作):

@XmlSchema (
    namespace="http://www..",
    elementFormDefault=XmlNsForm.QUALIFIED,
    xmlns = { 
        @XmlNs( prefix=" ", namespaceURI="http://www..."),
        @XmlNs( prefix="atom" ,namespaceURI="http://www.w3.org/2005/atom")
})

我猜这是prefix 使用单个空字符串和elementFormDefault 使用QUALIFIED 的组合。试试这个:

@XmlSchema(
    namespace="http://www..",
    elementFormDefault=XmlNsForm.UNQUALIFIED,
    xmlns = { 
        @XmlNs(prefix="atom", namespaceURI="http://www.w3.org/2005/atom")
})

即UNQUALIFIED,只为您想要合格的零件提供xmlns。您可能需要在整个@XmlElement 标签上指定命名空间(文档有些不清楚),所以我还建议将其重构为接口中的常量;这也让事情变得更加清晰。

【讨论】:

  • 另外,如果您要处理大量需要限定的类,请将它们放在不同的命名空间中,并在那里使用单独的 @XmlSchema 声明,说明它们是默认合格。但通常情况下,您需要来自特定“标准”名称空间的元素,这会使事情变得复杂。 (FWIW,我通常生成完全限定的模式 - 明确是好的 - 但我可以理解为什么不这样做的原因。)
猜你喜欢
  • 2013-03-20
  • 2019-04-29
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
相关资源
最近更新 更多