如何去掉使用xinclude后添加到xml文档中的xml:base属性?
我正在尝试使用xinclude将xml文件解组到java对象。我有一个基于jaxb注释代码文件的模式。以下是我的解组代码:如何去掉使用xinclude后添加到xml文档中的xml:base属性?,xml,xml-parsing,jaxb,xinclude,Xml,Xml Parsing,Jaxb,Xinclude,我正在尝试使用xinclude将xml文件解组到java对象。我有一个基于jaxb注释代码文件的模式。以下是我的解组代码: @Override public T readFromReader(final Reader reader) throws Exception { final Unmarshaller unmarshaller = createUnmarshaller(); final SAXParserFactory spf = SAXParserFactory.new
@Override
public T readFromReader(final Reader reader) throws Exception {
final Unmarshaller unmarshaller = createUnmarshaller();
final SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setXIncludeAware(true);
spf.setNamespaceAware(true);
//spf.setValidating(true);
final XMLReader xr = spf.newSAXParser().getXMLReader();
final InputSource inputSource = new InputSource(reader);
xr.parse(inputSource)
final SAXSource source = new SAXSource( xr, new InputSource(reader) );
try {
final T object = (T) unmarshaller.unmarshal(source);
postReadSetup(object);
return object;
} catch (final Exception e) {
throw new RuntimeException("Cannot parse XML: Additional information is attached. Please ensure your XML is valid.", e);
}
}
因为我调用了xr.parse(),所以实际的解组没有成功(因为解析关闭了流)。但是,我得到一个解析错误[error]文件名。xml:2:66:cvc复杂类型。3.2.2:属性“xml:base”不允许出现在元素“element name”中。
我发现这是因为xinclude总是向包含的元素添加一个xml:base属性,以帮助保留基本uri。问题是我的模式不允许此属性。我有办法摆脱这个吗?我在网上浏览了一下,没有看到任何可以轻松实现的东西。我添加了以下代码行:
// to get rid of xml:base that is brought in with xinclude
spf.setFeature("http://apache.org/xml/features/xinclude/fixup-base-uris", false);
在相同的位置,我将解析器工厂设置为xinclude-aware per