【发布时间】:2011-08-31 18:36:04
【问题描述】:
使用手工编写的代码,我的 xml 是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
<artist-list offset="0" count="8">
<artist type="Person" id="00ed154e-8679-42f0-8f42-e59bd7e185af"
ext:score="100">
现在使用更好的 JAXB,但是虽然 xml 完全有效,但我需要强制它将 xmlns:ext="http://musicbrainz.org/ns/ext#-1.0" 放在元数据元素中,而不是与我无法控制的客户端代码兼容的艺术家元素。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
<artist-list offset="0" count="4">
<artist type="Person" id="00ed154e-8679-42f0-8f42-e59bd7e185af"
ext:score="100" xmlns:ext="http://musicbrainz.org/ns/ext#-1.0">
请问这个可以吗?
编辑:用字符串替换来解决它,因为我只需要处理一个特定的情况
String xml = sw.toString();
//Remove extension namespace definition
xml=xml.replace("xmlns:ext=\"http://musicbrainz.org/ns/ext#-1.0","");
//Add it to the top instead
xml=xml.replace("<metadata xmlns=\"http://musicbrainz.org/ns/mmd-1.0#\">",
"<metadata xmlns=\"http://musicbrainz.org/ns/mmd-1.0#\" xmlns:ext=\"http://musicbrainz.org/ns/ext-1.0#\">");
//Now write out to the proper output stream
out.write(xml);
【问题讨论】:
-
用字符串替换解决了它
-
如果现有元素中有额外的空格,您的替换将不起作用。
-
true 但初始 xml 是由 jaxb 生成的,并且始终生成相同的,因此在这种情况下始终有效。
标签: java xml namespaces jaxb xml-namespaces