0

XMLファイルからいくつかの属性を解析してJavaのオブジェクトにすることが可能かどうか知りたい

xml にあるすべてのフィールドを作成したくありません。

それで、どうすればこれを行うことができますか?

以下の例では、xml ファイルがあり、タグ内のデータのみが必要です。

<emit>
<CNPJ>1109</CNPJ>
<xNome>OESTE</xNome>
<xFant>ABATEDOURO</xFant>
<enderEmit>
    <xLgr>RODOVIA</xLgr>
    <nro>S/N</nro>
    <xCpl>402</xCpl>
    <xBairro>GOMES</xBairro>
    <cMun>314</cMun>
    <xMun>MINAS</xMun>
    <UF>MG</UF>
    <CEP>35661470</CEP>
    <cPais>58</cPais>
    <xPais>Brasil</xPais>
    <fone>03</fone>
</enderEmit>
<IE>20659</IE>
<CRT>3</CRT>

4

3 に答える 3

2

XSD がなく、XML を表す完全なオブジェクト グラフを作成したくない Java XML 解析の場合、JDOMは優れたツールです。XML ツリーを簡単にたどって、関心のある要素を選択することができます。

JDOM を使用して XML ドキュメントから任意の値を選択するサンプル コードを次に示します。

  // reading can be done using any of the two 'DOM' or 'SAX' parser
  // we have used saxBuilder object here
  // please note that this saxBuilder is not internal sax from jdk
  SAXBuilder saxBuilder = new SAXBuilder();

  // obtain file object
  File file = new File("/tmp/emit.xml");

  try {
     // converted file to document object
     Document document = saxBuilder.build(file);

     //You don't need this or the ns parameters in getChild()
     //if your XML document has no namespace
     Namespace ns = Namespace.getNamespace("http://www.example.com/namespace");

     // get root node from xml.  emit in your sample doc?
     Element rootNode = document.getRootElement();

     //getChild() assumes one and only one, enderEmit element.  Use a lib and error
     //checking as needed for your document
     Element enderEmitElement = rootNode.getChild("enderEmit", ns);

     //now we get two of the child  from
     Element xCplElement = enderEmitElement.getChild("xCpl", ns);
     //should be 402 in your example
     String xCplValue = xCplElement.getText();
     System.out.println("xCpl: " + xCplValue);

     Element cMunElement = enderEmitElement.getChild("cMun", ns);
     //should be 314 in your example
     String cMunValue = cMunElement.getText();
     System.out.println("cMun: " + cMunValue);


  } catch (JDOMException e) {
     e.printStackTrace();
  } catch (IOException e) {
     e.printStackTrace();
  }
于 2013-09-03T03:19:44.390 に答える