Java + XML问题

时间:2009-09-29 18:59:24

标签: java xml parsing

我对XML解析很陌生。如果你能帮助我,我将非常感激。

我需要提取一些结构为:

的XML文档中的数据
<DWDocument DW5BasketFileName="DOCU0001.001">
  <FileInfos>
    <ImageInfos>
      <ImageInfo id="0,0,0" nPages="0">
        <FileInfo fileName="PATH_1" dwFileName="FILE_NAME_1" signedFileName="FILE_NAME_2" type="normal" length="77324" />
      </ImageInfo>
    </ImageInfos>
  </FileInfos>
  <FileDatas />
  <Section number="0" startPage="0" dwguid="d8a50daf-d4df-4012-ad0c-85e26a6e0755">
    <Metadata version="0">
      <FieldProperties>
        <TextVar length="20" field="FIELD_1" id="0">9866627</TextVar>
        <TextVar length="20" field="FIELD_2" id="1">78050830431</TextVar>
        <TextVar length="40" field="FIELD_3" id="32">GOMEZ PADILLA</TextVar>
        <TextVar length="40" field="FIELD_4" id="33">JOSSER KICO</TextVar>
        <Date field="FIELD_5" id="64">1985-07-02T00:00:00</Date>
      </FieldProperties>
    </Metadata>
  </Section>
</DWDocument>

我在Java桌面应用程序中。我不知道该怎么做,如果它可能是一个代码示例。

我需要将FIELD_1提取到FIELD_4值(986627,...),每个值都是一个不同的变量。

感谢。

4 个答案:

答案 0 :(得分:4)

你可以使用XPath


String filename = "C:\\a.xml";
String expression = "//TextVar";
try {
 Document document = DocumentBuilderFactory.newInstance()
   .newDocumentBuilder().parse(new File(filename));
 NodeList nn = (NodeList) XPathFactory.newInstance().newXPath()
   .evaluate(expression, document, XPathConstants.NODESET);
 for (int i = 0; i < nn.getLength(); i++) {
  Node item = nn.item(i);
  String field = item.getAttributes().getNamedItem("field").getTextContent();
  String number = item.getTextContent();
  System.out.println("field=" + field);
  System.out.println("number=" + number);
 }
} catch (Exception e) {
 throw new RuntimeException(e);
}

输出:

field=FIELD_1
number=9866627
field=FIELD_2
number=78050830431
field=FIELD_3
number=GOMEZ PADILLA
field=FIELD_4
number=JOSSER KICO

答案 1 :(得分:3)

如果您的需求仅限于从XML文档中提取值而不再需要,那么XPath查询就足够了。

Sun JRE附带了一个内置的XML解析器,XSLT转换器和XPath引擎。在其他JRE上,您需要打包像Xalan这样的XPath引擎。

一个很好的教程,可以让你在XPath in Java 5 is available at IBM Developerworks上自行启动。

在Java API文档中开始引用的最重要的类是

  • 的DocumentBuilderFactory
  • 的DocumentBuilder
  • 文档
  • 的XPathFactory
  • 的XPath
  • XPathExpression
  • XPathConstants中

前三个类可以帮助您将XML文档的内容加载到对象中,以后可以在XPath查询中使用。从创建XPath表达式和将表达式的结果转换回应用程序中的合适对象的角度来看,后四个类很重要。

答案 2 :(得分:0)

如果这是整个XML文档,您也可以使用正则表达式来提取“&gt;”之间的字符。和“”。这将为您节省构建DOM文档(例如,通过使用JDOM)或处理来自SAX解析器的回调的大量开销。

答案 3 :(得分:0)

用VTD-XML编写的相同代码,以防你被这么多工厂搞糊涂了:

import com.ximpleware.*;

public class Example1 {
    public static void main(String[] argv) throws Exception{
        VTDGen vg = new VTDGen();
        if (vg.parseFile("c:/test2.xml",true)){
            VTDNav vn = vg.getNav();
            AutoPilot ap = new AutoPilot(vn);
            ap.selectXPath("//TextVar/text()");
            int i;
            while((i=ap.evalXPath())!=-1){
                System.out.println(" text value ==>"+vn.toString(i));
            }
        }
    }
}

输出

 text value ==>9866627
 text value ==>78050830431
 text value ==>GOMEZ PADILLA
 text value ==>JOSSER KICO