0

この種のXML文字列を解析したいと思います。

<Objects>
   <Object type="crs" obj_id="192">
      <Title>Course 1</Title>
      <Description>this is description</Description>
      <CreateDate>2012-10-16 12:53:12</CreateDate>
      <LastUpdate>2012-10-16 12:53:54</LastUpdate>
   </Object>

   <Object type="frm" obj_id="202">
      <Title>Forum 1</Title>
      <Description>this is description</Description>
      <CreateDate>2012-10-30 01:06:41</CreateDate>
      <LastUpdate>2012-10-30 01:06:41</LastUpdate>
   </Object>
</Objects>

同じ構造で、ラベルが<Object>のXML文字列を解析しました。次に、ラベルObject内の情報を取得して、type="xxx"の文字列を取得します。

これは私がそれらの種類の解析を行う方法です:

try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource xml = new InputSource();
        xml.setCharacterStream(xmlSTring);
        Document doc = db.parse(xml);
        NodeList nodes = doc.getElementsByTagName("Object");

        // iterate objects 
        for (int i = 0; i < nodes.getLength(); i++) {
           Element element = (Element) nodes.item(i);
           // get first attribute
           NodeList ref_id = element.getElementsByTagName("title");
           Element line = (Element) ref_id.item(0);
           System.out.println("title: " + getCharacterDataFromElement(line));

        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
private static String getCharacterDataFromElement(Element e) {
    Node child = e.getFirstChild();
    if (child instanceof CharacterData) {
        CharacterData cd = (CharacterData) child;
        return cd.getData();
    }
    return "?";
}

前もって感謝します。

4

2 に答える 2

1

メインループで

element.getAttribute("type");

あなたが望むものを手に入れるべきです。

domを使用する代わりに、staxを見ることができます

jee5staxチュートリアル

于 2012-11-16T01:36:56.187 に答える
0

このような問題には、JAXBを使用することもできます。サンプルのXMLファイルがある場合は、Trangというプログラムを使用してxsdを生成できます。これは、そのプログラムを使用して生成したxmlドキュメントのスキーマです。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Objects">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="Object"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Object">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Title"/>
        <xs:element ref="Description"/>
        <xs:element ref="CreateDate"/>
        <xs:element ref="LastUpdate"/>
      </xs:sequence>
      <xs:attribute name="obj_id" use="required" type="xs:integer"/>
      <xs:attribute name="type" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Title" type="xs:string"/>
  <xs:element name="Description" type="xs:string"/>
  <xs:element name="CreateDate" type="xs:string"/>
  <xs:element name="LastUpdate" type="xs:string"/>
</xs:schema>

次に、JAXBを使用してxmlドキュメントのオブジェクトを生成し、xmlをそれらのオブジェクトにバインドできます。

于 2012-11-16T02:45:45.860 に答える