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 で属性を変更するためのより良いアイデアを提案できますか?