1 つのスレッドで XML ファイルを読み取り、2 つのスレッドを介していくつかのノードを追加したいと考えています。ライター スレッドは同時にファイルに書き込むことはできません。また、リーダー スレッドはファイルの内容を読み取ってバッファーに入れます。リーダーがこの操作を行うと、ライターはこのバッファーにアクセスできません。
これどうやってするの??
私はXMLファイルを読み、この方法でこれにノードを追加します:
public synchronized void AddNewNode(Document doc) throws TransformerException {
Element book = doc.createElement("book");
book.setAttribute("id", "3");
Element name = doc.createElement("name");
name.setTextContent("new");
Element id = doc.createElement("id");
id.setTextContent("31");
Element writer = doc.createElement("writer");
writer.setTextContent("tester");
Element price = doc.createElement("price");
price.setTextContent("3100");
book.appendChild(name);
book.appendChild(id);
book.appendChild(writer);
book.appendChild(price);
doc.getDocumentElement().appendChild(book);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult("/home/zahra/workspace/test1/src/xmlfile.xml");
transformer.transform(source, result);
}
public void ReadNodes(Document doc) {
NodeList nList = doc.getElementsByTagName("book");
System.out.println("\n" + ":0 :) :0 :) :0 :) :0 :) :0 :)");
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
System.out.println("\n" + "Element number " + (i + 1) + "\n");
Element eElement = (Element) nNode;
for (int j = 0; j < eElement.getChildNodes().getLength(); j++) {
String tagName = eElement.getChildNodes().item(j).getNodeName();
if (eElement.getElementsByTagName(tagName).getLength() > 0) {
System.out.println(eElement.getChildNodes().item(j).getNodeName()
+ " : "
+ eElement.getElementsByTagName(tagName).item(0).getTextContent());
}
}
}
}
ありがとう!