JAXB 中没有前缀的名称空间
Namespace with no prefix in JAXB
我正在尝试使用 JAXB 创建一个 Sitemap index 文件。按照创建站点地图的要求,我必须在根元素中添加名称空间属性:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
我想要一个简单的方法来解决这个问题。因为这似乎是一个标准程序,所以我不想对我的项目进行 complex workaround or add more dependencies 来解决这个问题
当前输出如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:sitemapindex xmlns:ns2="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/sitemap-1.xml</loc>
<lastmod>2017-05-01T15:41:17.561+01:00</lastmod>
</sitemap>
</ns2:sitemapindex>
我的 SitemapIndex
模型如下:
@XmlRootElement(name = "sitemapindex", namespace="http://www.sitemaps.org/schemas/sitemap/0.9")
@XmlAccessorType(XmlAccessType.FIELD)
public class SitemapIndex {
@XmlElement(name = "sitemap")
private List<Sitemap> sitemaps;
public void setSitemaps(List<Sitemap> sitemaps) {
this.sitemaps = sitemaps;
}
public List<Sitemap> getSitemaps() {
return sitemaps;
}
}
我也尝试过手动添加命名空间字段,它可以生成文件,但是当我尝试读取文件时抛出异常。
@XmlAttribute(name="xmlns")
private final String namespace ="http://www.sitemaps.org/schemas/sitemap/0.9";
您可以使用 @XmlSchmea
[1] 包级别注释来设置前缀。对于您的情况,我们只设置空前缀。
只需在您的包中创建 package-info.java
文件,例如com.Whosebug.jaxb
,内容相似
包-info.java
@XmlSchema(namespace = "http://www.sitemaps.org/schemas/sitemap/0.9",
xmlns = {@XmlNs(prefix = "",
namespaceURI = "http://www.sitemaps.org/schemas/sitemap/0.9")},
elementFormDefault = XmlNsForm.QUALIFIED)
package com.Whosebug.jaxb;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
请注意,您可以从 @XmlRootElement
注释中删除 namespace
属性。
[1] https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlSchema.html
我正在尝试使用 JAXB 创建一个 Sitemap index 文件。按照创建站点地图的要求,我必须在根元素中添加名称空间属性:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
我想要一个简单的方法来解决这个问题。因为这似乎是一个标准程序,所以我不想对我的项目进行 complex workaround or add more dependencies 来解决这个问题
当前输出如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:sitemapindex xmlns:ns2="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/sitemap-1.xml</loc>
<lastmod>2017-05-01T15:41:17.561+01:00</lastmod>
</sitemap>
</ns2:sitemapindex>
我的 SitemapIndex
模型如下:
@XmlRootElement(name = "sitemapindex", namespace="http://www.sitemaps.org/schemas/sitemap/0.9")
@XmlAccessorType(XmlAccessType.FIELD)
public class SitemapIndex {
@XmlElement(name = "sitemap")
private List<Sitemap> sitemaps;
public void setSitemaps(List<Sitemap> sitemaps) {
this.sitemaps = sitemaps;
}
public List<Sitemap> getSitemaps() {
return sitemaps;
}
}
我也尝试过手动添加命名空间字段,它可以生成文件,但是当我尝试读取文件时抛出异常。
@XmlAttribute(name="xmlns")
private final String namespace ="http://www.sitemaps.org/schemas/sitemap/0.9";
您可以使用 @XmlSchmea
[1] 包级别注释来设置前缀。对于您的情况,我们只设置空前缀。
只需在您的包中创建 package-info.java
文件,例如com.Whosebug.jaxb
,内容相似
包-info.java
@XmlSchema(namespace = "http://www.sitemaps.org/schemas/sitemap/0.9",
xmlns = {@XmlNs(prefix = "",
namespaceURI = "http://www.sitemaps.org/schemas/sitemap/0.9")},
elementFormDefault = XmlNsForm.QUALIFIED)
package com.Whosebug.jaxb;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
请注意,您可以从 @XmlRootElement
注释中删除 namespace
属性。
[1] https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlSchema.html