0

我是使用 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;
}
4

3 回答 3

0

首先你需要像这样创建一个节点

Node nNode = datasetallRecords.item(y);

然后像这样的元素

Element eElement = (Element) nNode;

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

于 2013-06-10T09:27:08.277 回答
0

您没有获得标签,因为对getTextContent()“记录”节点的调用将返回该节点及其后代的文本内容。

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

于 2013-06-10T09:28:21.423 回答
0

当您创建 builder 的新实例时,您可以获得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();
         }
}
于 2013-06-10T09:28:39.940 回答