XML形式の文字列があります。私はそれを読み、要素の値を取得したいです。
Java JAXBContext unmarshell を試しましたが、これにはクラスの作成が必要ですが、これは私には必要ありません。
ストリング:
<customer>
<age>35</age>
<name>aaa</name>
</customer>
ageとnameの値を取得したい。
これはあなたのxmlです:
String xml = "<customer><age>35</age><name>aaa</name></customer>";
そして、これはパーサーです:
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource src = new InputSource();
src.setCharacterStream(new StringReader(xml));
Document doc = builder.parse(src);
String age = doc.getElementsByTagName("age").item(0).getTextContent();
String name = doc.getElementsByTagName("name").item(0).getTextContent();
JSoup にはXMLの素晴らしいサポートがあります
import org.jsoup.*
import org.jsoup.nodes.*
import org.jsoup.parser.*
//str is the xml string
String str = "<customer><age>35</age><name>aaa</name></customer>"
Document doc = Jsoup.parse(str, "", Parser.xmlParser());
System.out.println(doc.select("age").text())
標準APIで XPath を使用:
String xml = "<customer>" + "<age>35</age>" + "<name>aaa</name>"
+ "</customer>";
InputSource source = new InputSource(new StringReader(xml));
XPath xpath = XPathFactory.newInstance()
.newXPath();
Object customer = xpath.evaluate("/customer", source, XPathConstants.NODE);
String age = xpath.evaluate("age", customer);
String name = xpath.evaluate("name", customer);
System.out.println(age + " " + name);
[〜#〜] jdom [〜#〜] は非常に使いやすいです。
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File("c:\\file.xml");
Document document = (Document) builder.build(xmlFile);
Element rootNode = document.getRootElement();
List list = rootNode.getChildren("customer");
for (int i = 0; i < list.size(); i++) {
Element node = (Element) list.get(i);
System.out.println("Age : " + node.getChildText("age"));
System.out.println("Name : " + node.getChildText("name"));
}
私と同じように、より複雑なXMLを使用するユーザー向けのちょっとしたヒントとして。同じ名前の要素があり、属性が異なる場合、たとえば:
_<field tag="8"> Country </field>
<field tag="12"> State </field>
_
それらを抽出する方法は、@ vaultの answer に従うことですが、.item(int)
関数の値を必ず変更してください。
最初のフィールドが必要な場合は、.item(0)
を使用します。 2番目が必要な場合は、.item(1)
を使用します
これが将来のユーザーに役立つことを願っています。
この汎用メソッドを使用して、すべての要素を繰り返し処理します。
public static void getElementValues(Node node) {
NodeList nodeList = node.getChildNodes();
for (int i = 0, len = nodeList.getLength(); i < len; i++) {
Node currentNode = nodeList.item(i);
if (len == 1 && currentNode.getNodeType() == Node.TEXT_NODE) {
System.out.println(node.getLocalName() + "=" + currentNode.getTextContent());
}
else if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
getElementValues(currentNode);
}
}
}
結果:
age = 35
name = aaa