import java.io.*;
import java.util.Vector;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
class NodeCntrl {
public NodeCntrl(){ }
/**
* <タグ>値</タグ>の、値のノードを取得して返します。
*/
public Node getTextNode(Node onode){
NodeList a = onode.getChildNodes();
for(int i=0; i<a.getLength(); i++){
Node c = a.item(i);
if(c.getNodeType() == Node.TEXT_NODE){
return c;
}
}
return null;
}
/**
* <タグ>値</タグ>の、値を取得して返します。
*/
public String getTextValue(Node onode){
Node c = getTextNode(onode);
return (c == null) ? null : c.getNodeValue();
}
/**
* <タグ>値</タグ>の、値に引数の値をセットします。
*/
public void setTextValue(Node onode, String newValue){
Node c = getTextNode(onode);
if(c != null){
c.setNodeValue(newValue);
}
}
/**
* 自分の子ノードの中から、タグ名がtagNameの要素ノードを探し、
* 最初のノード返します。見つからなければnullを返します。
*/
public Node getChildElement(Node onode, String tagName){
Vector v = new Vector();
NodeList a = onode.getChildNodes();
for(int i=0; i<a.getLength(); i++){
Node c = a.item(i);
if(c.getNodeType() == Node.ELEMENT_NODE){
if( ((Element)c).getTagName().equals(tagName)){
return c;
}
}
}
return null;
}
/**
* 自分の子ノードの中から、タグ名がtagNameの要素ノードを探し、
* Vectorにして返します。見つからなければnullを返します。
*/
public Vector getChildElements(Node onode, String tagName){
Vector v = new Vector();
NodeList a = onode.getChildNodes();
for(int i=0; i<a.getLength(); i++){
Node c = a.item(i);
if(c.getNodeType() == Node.ELEMENT_NODE){
if( ((Element)c).getTagName().equals(tagName)){
v.addElement(c);
}
}
}
if(v.size() == 0) return null;
else return v;
}
}
public class EditXMLExample {
private static Document openDocument(String filename)
throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(filename));
return doc;
}
public static void main(String[] args) throws Exception {
Document doc = openDocument("orderhist.xml");
Node root = doc.getFirstChild();
if(! ((Element)root).getTagName().equals("文書")){
System.err.println("エラー: ルート要素のタグ名が「文書」でありません。");
return;
}
NodeCntrl con = new NodeCntrl();
Node node = con.getChildElement(root, "取引先");
Node nodev = con.getChildElement(node, "名称");
String vendorName = con.getTextValue(nodev);
Node nodek = con.getChildElement(node, "発注金額");
int kingaku = Integer.parseInt(con.getTextValue(nodek));
if(vendorName.indexOf("南アルプス工業") >= 0){
System.out.println("[" + vendorName + "] [" + kingaku + "]");
con.setTextValue(nodek, String.valueOf(kingaku + 100));
try{
((XmlDocument)doc).write(new PrintWriter(System.out), "Shift_JIS");
} catch (IOException e){ e.printStackTrace(); }
}
}
}
/* end. */
|