MY xml:
<?xml version="1.0"?>
<company xmlns="http://www.xx.com/xx">
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
Reader in = new StringReader(message);
Document document = (Document)saxBuilder.build(in);
Element rootNode = document.getRootElement();
List<?> list = rootNode.getChildren("staff", Namespace.getNamespace("xmlns="http://www.infonova.com/MediationFeed""));
XMLOutputter outp = new XMLOutputter();
outp.setFormat(Format.getCompactFormat());
for (int ii = 0; ii < list.size(); ii++) {
Element node = (Element)list.get(ii);
StringWriter sw = new StringWriter();
outp.output(node.getContent(), sw);
StringBuffer sb = sw.getBuffer();
String xml = sb.toString();
}
但我的xml
对象看起来像这样
<firstname xmlns="http://www.xx.com/xx">yong</firstname>
<lastname xmlns="http://www.xx.com/xx">mook kim</lastname>
<nickname xmlns="http://www.xx.com/xx">mkyong</nickname>
<salary xmlns="http://www.xx.com/xx">100000</salary>
每个元素都有命名空间。为什么这个?我不想要命名空间...我想要与xml示例中的输出相同,如
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
答案 0 :(得分:3)
您获得了正确的结果。所有这些元素都从命名空间“http://www.xx.com/xx”开始,因此在输出Elements时它们保留它是有意义的。请注意,在XML中,默认命名空间(没有前缀的命名空间)应用于所有后代但尚未重新定义默认命名空间的元素。
如果这看起来像是一个复杂的解释,请尝试命名空间规范:http://www.w3.org/TR/REC-xml-names/或命名空间教程:http://www.w3schools.com/xml/xml_namespaces.asp
如果您不想在这些元素上使用命名空间,可以使用以下命令删除它们:
node.setNamespace(Namespace.NO_NAMESPACE);
罗尔夫
答案 1 :(得分:0)
您必须理解XML(以其文本形式)和节点树之间的区别。在树中,没有继承或默认命名空间:每个元素节点都有自己的命名空间,无论其祖先的命名空间如何且独立。要实现所需,您必须更改所有元素节点的命名空间。在您的情况下,遍历getContent()返回的列表,并将每个元素的名称空间设置为NO_NAMESPACE。