当前位置: 首页 > 知识库问答 >
问题:

JAXB中没有前缀的命名空间

璩无尘
2023-03-14

我正在尝试使用 JAXB 创建站点地图索引文件。按照创建站点地图的要求,我必须在根元素中添加命名空间属性:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

我想有一个简单的方法来解决这个问题。因为这似乎是一个标准过程,所以我不想做复杂的解决方法,也不想在我的项目中添加更多的依赖项来解决这个问题

当前输出如下:

<?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>

我的< code>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";

共有1个答案

邢飞白
2023-03-14

您可以使用@XmlSchmea [1] 包级别注释来设置前缀。在您的情况下,我们只是设置空前缀。

只需在您的包中创建具有类似内容的< code>package-info.java文件,例如< code > com . stack overflow . JAXB 。

package-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.stackoverflow.jaxb;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

请注意,您可以从注释中删除@XmlRootElement命名空间属性。

[1]https://JAXB . Java . net/nonav/2 . 2 . 4/docs/API/javax/XML/bind/annotation/XML schema . html

 类似资料:
  • 我想使用JAXB来 将xml解组为java对象, 将其封送回xml 并使用名称空间生成完全相同的输出 下面是原始的 XML: 我正在使用以下POJO: 我用于取消/编组的代码: 这实际上不起作用,我甚至无法解组初始xml。但是如果我尝试封送一个POJO,我只在代码中设置字段。我得到以下结果: 我如何摆脱这个ns3前缀?

  • 我有一个有趣的情况,我的XML编辑器(Oxygen,使用Xerces XML处理器)需要根标签上的前缀,但是我的JAXB XML Marshaller(也是基于Xerces的)不需要根标签上的前缀。我正在试图理解这种情况。 首先是2个模式文件: ns1.xsd ns2。xsd 目前的氧气释放(16.1)需要我称之为“版本1”的东西 版本1 如果我像下面的示例(版本1)那样删除前缀: 版本2 氧气抱

  • 面临使用JAXB解组的问题。我需要使用多个名称空间。Java类是为第三方提供的XSD生成的。因此,我不想在Java类中的XMLRootElement指定名称空间,也不想手动更改多个类。 编组逻辑如下: xmlelement类TokenRequest.java BasicInRequestType.java 我在package-info.java中指定了前缀 TokenRequest元素实际上引用了

  • 我正在开发一个客户端来使用 Web 服务,但由于某种原因,除非所有命名空间都正确且没有任何前缀,否则我的请求没有得到正确处理。 我所有的类都是由服务提供商使用提供的XSD和WSDL创建的。 NfeDadosMsg.class 包装信息.java TConsStatServ.class package br.inf.portalfiscal.nfe; 包装信息.java 输出xml: 由于某种原因,

  • 我使用JAXB从SOAP响应中解析xml元素。我已经为xml元素定义了POJO类。我已经测试了没有名称空间和前缀的pojo类,它工作得很好。需求是解析来自SOAPMessage对象的输入

  • jaxb 将所有标签分组为一个,我需要每个标签都有自己的命名空间。 具有: 需要: 将命名空间添加到@XmlElement没有帮助 包装信息: