0

DOM4J を使用して XML ファイルを解析し、属性値を変更しています。

ここで、属性を変更するときにいくつかの問題に直面しています。新しく更新された XML ファイルを生成した後、DOM4J がそれらの属性を変更できなかったようです。

これは、解析したいサンプルの xml ファイルです。

<Form Width="69977" RowHeight="37998" ColWidth="69977" RowCount="7"
        RowOffset="0" ColCount="3" ColOffset="0" MarginLeft="0" MarginTop="0"
        MarginRight="0" MarginBottom="0" PrintOrder="0" Orientation="Portrait"
        Rotation="0" DataSource="">
        <FileVersion Major="2" Minor="1" />
        <DocumentName />
        <Comment />
        </Form>

ここで form タグで、MarginRight と MarginTop の値を変更します。

そして、属性を変更するために使用しているコードは次のとおりです...

//ITERATE OVER GIVEN NODE NAMES AND MAKE SEARCH OF IT
            for(String nodeName : nodeNameSet){
                nodeList = document.getElementsByTagName(nodeName);


                if(nodeList!=null && nodeList.getLength()>0){
                    node = nodeList.item(0);

                    //ITERATE OVER ATTRIBUTE NAME-VALUE MAP AND REPLACE THE EXISTING VALUEs
                    attribNameValMap = nodeArrribMap.get(nodeName);
                    attribNameSet = attribNameValMap.keySet();

                    if (node!=null && node.getNodeType() == Node.ELEMENT_NODE) {
                        for(String attribute : attribNameSet){
                            element = (Element)node;
                            element.setAttribute(attribute,attribNameValMap.get(attribute));
                        }                       
                    }else{
                        throw new SELSystemException("Error while parsing XML File : Required Node Type : ELEMENT : Found Node Type :"+node.getNodeType());
                    }

                }

            }

            //CREATE A TRANSFORMER TO TRANSFORM THE XML TO INPUTSTREAM
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

            //PREAPRE A SOURCE TO WRITE THE  FILE BACK
            DOMSource domSource = new DOMSource(document);
            //WRITE THE UPDATED CONTENT TO A STRINGWRITER
            Writer writer = new StringWriter();
            StreamResult result = new StreamResult(writer);
            //TRANSFORM THE CONTENT TO STRINGBUILDER
            transformer.transform(domSource, result);
            //CONVERT STRINGBUILDER DATA TO STRING
            returnStream = writer.toString();

ここの returnStream 変数で、ファイル ストリームを古い xml ファイルと比較しました。しかし、属性は変更されていないようです。

誰かが DOM4J で属性を変更するためのより良いアイデアを提案できますか?

4

1 に答える 1

0

上記のコードは正常に機能しています。

実際、生成されたXMLファイルをもう一度確認したところ、「」タグが2つあることがわかりました。したがって、上記のコードは、私が気付いていない最初のタグの属性を変更しました。

したがって、上記のコードは正常に機能しています。

ありがとう。

于 2013-01-31T11:31:14.490 に答える