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 に答える