みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Javaでxmlを扱う方法について

Javaプログラミングで、XMLの扱いに詳しくないので、以下をお教えいただけると
嬉しいです。


次のようなXMLファイル(test.xml)があるとします。

<myxml>
<version>1</version>
<datas>
<detail>
<id>5</id>
<value>234</value>
</detail>

<detail>
<id>10</id>
<value>223</value>
</detail>

<detail>
<id>15</id>
<value>223</value>
</detail>

<detail>
<id>20</id>
<value>223</value>
</detail>
</datas>
</myxml>


このXMLをメモリに読み込んで、<id>が10の<detail>だけを書き換えて、
同じファイルに出力するプログラムが組みたいのですが、 javaでのやりかたを
教えていただけませんか?

出力結果は、以下のようにしたいのですが・・・

<myxml>
<version>1</version>
<datas>
<detail>
<id>5</id>
<value>234</value>
</detail>

<detail>
<id>10</id>
<value>424</value> ← ココだけ変えたい
</detail>

<detail>
<id>15</id>
<value>223</value>
</detail>

<detail>
<id>20</id>
<value>223</value>
</detail>
</datas>
</myxml>


基本的なJavaプログラミングだと思うのですが、javaに詳しくないので、
ご教授いただけると嬉しいです。

よろしくお願いします。

投稿日時 - 2017-10-17 17:29:36

QNo.9386886

困ってます

質問者が選んだベストアンサー

割と処理が面倒だったので、そのまま例を乗せてみます
例ではsample.xmlを入力ソースとして読み取ってid=10の場合のvalue値を変更してoutput.xmlに出力するサンプルです

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XmlTest {

public static void main(String[] args) throws Exception {
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(new File("sample.xml"));
NodeList nodeList = document.getElementsByTagName("detail");
for (int i = 0; i < nodeList.getLength(); i++)
if ("10".equals(getNodeByName(nodeList.item(i), "id").getTextContent()))
getNodeByName(nodeList.item(i), "value").setTextContent("変えたい値");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty("encoding", "UTF-8");
transformer.transform(new DOMSource(document), new StreamResult(new File("output.xml")));
}

public static Node getNodeByName(Node node, String name) {
for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling())
if (name.equals(child.getNodeName()))
return child;
return null;
}

}

投稿日時 - 2017-10-18 17:30:39

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.1

>基本的なJavaプログラミングだと思うのですが、javaに詳しくないので、
>ご教授いただけると嬉しいです。

XMLの操作は基本的なJavaプログラミングではないですよ。
結構面倒です。

http://www.atmarkit.co.jp/ait/series/2340/

あたりを参考にしてみてください。

投稿日時 - 2017-10-17 19:57:37

あなたにオススメの質問