使用DOM在java中读取XML

时间:2013-06-10 09:07:42

标签: java xml dom

我是使用DOM在Java中读取XML的新手。有人可以通过简单的代码步骤帮助我在DOM中读取这个XML吗?

这是我的XML:

<DataSet xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='datamartschema.1.3.xsd'>
<DataStream title='QUESTIONNAIRE'>
<Record>
<TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>xhaksdj</SubType>
<IntegerValue title='ComponentID'>11111</IntegerValue>
</Record><Record>
<TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>jhgjhg</SubType>
<IntegerValue title='ComponentID'>11111</IntegerValue>
</Record>
</DataStream>
</DataSet>

在这个XML中,我需要读取DataStream值和Record值。我的预期输出是

DataStream=QUESTIONNAIRE and my records are 
<TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>xhaksdj</SubType><IntegerValue title='ComponentID'>11111</IntegerValue><TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>jhgjhg</SubType><IntegerValue title='ComponentID'>11111</IntegerValue>

如何获得此输出?我试过自己,但我不能像上面那样得到记录输出。我得到没有标签的输出,这些标签出现在上面的输出中。我正在使用这一行来获得输出。但它没有给我正确的输出。另外,如何从这个XML读取数据流值?请帮助我。

这是我的代码段

NodeList datasetallRecords = indElement.getElementsByTagName("Record");
for (int y = 0; y < datasetallRecords.getLength(); y++) {
    Element recordsElement = (Element) datasetallRecords.item(y);

    recordXMl = recordXMl + recordsElement.getTextContent();
    String d = datasetallRecords.item(y).getTextContent();
    if (recordsElement.getTagName().equalsIgnoreCase("SubType")) {
        lsDataStreamSubTypes.add(recordsElement.getTextContent());
    }
    recordCount = y;
}

3 个答案:

答案 0 :(得分:0)

首先,您需要创建一个像这样的节点

Node nNode = datasetallRecords.item(y);

然后像这样的元素

Element eElement = (Element) nNode;

现在您可以使用getelementbyid和getnodevalue方法开始从元素中获取值。

答案 1 :(得分:0)

您没有收到代码,因为“记录”节点上对getTextContent()的调用将仅返回 该节点及其后代的文本内容。

如果您还需要节点,则必须手动处理XML。看看DOM tutorial它涵盖了如何在DOM模式下处理文档,包括如何读出元素名称。

答案 2 :(得分:0)

创建新的构建器实例时,您可以获得 DataStream 它看起来像这样:

 Element root = document.getDocumentElement();
 NodeList dataStreams = root.getElementsByTagName("DataStream");

然后扔掉这个列表,得到这样的所有信息:

for (int i = 0; i < dataStreams.lenght(); i++) {
         Element dataStream = (Element) dataStreams.item(i);
         if (dataStream.getNodeType() == Element.ELEMENT_NODE) {
                     String title = dataStream.getAttributes()
                                              .getNamedItem("title").getTextContent();
         }
}