2017-05-01 51 views
0

我正在嘗試使用JAXB創建Sitemap index文件。繼創建網站地圖的要求,我要補充的命名空間屬性中的根元素:在JAXB中沒有前綴的名稱空間

<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"; 

回答

1

可以以設置前綴使用@XmlSchmea [1]封裝級註釋。在你的情況下,我們只需設置空白前綴。

只需在您的包中創建package-info.java文件,例如com.stackoverflow.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註釋刪除namespace屬性。


[1] https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlSchema.html

+0

謝謝你的建議。這個解決方案使我有不同模式的每個模型有不同的包。無論如何,我認爲這是我的問題最適合的解決方案 – JCalcines

相關問題