1

我的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>
4

2 回答 2

3

你得到了正确的结果。所有这些元素都以命名空间“http://www.xx.com/xx”开始,因此在您输出元素时保留它是有意义的。请注意,在 XML 中,默认名称空间(没有前缀的名称空间)适用于所有后代元素,但这些元素本身并未重新定义默认名称空间。

如果这似乎是一个复杂的解释,请尝试命名空间规范:http ://www.w3.org/TR/REC-xml-names/或命名空间教程:http://www.w3schools.com/xml/xml_namespaces。 ASP

如果您不想在这些元素上拥有命名空间,您可以使用以下命令删除它们:

node.setNamespace(Namespace.NO_NAMESPACE);

罗尔夫

于 2012-10-04T16:27:36.687 回答
0

您必须理解 XML(以其文本形式)和节点树之间的区别。在树中,没有继承或默认命名空间之类的东西:每个元素节点都有自己的命名空间,与它的祖先的命名空间无关且独立。要实现您想要的,您必须更改所有元素节点的命名空间。在您的情况下,遍历 getContent() 返回的列表并将每个元素的命名空间设置为 NO_NAMESPACE。

于 2012-10-08T20:21:33.787 回答