繁体   English   中英

使用DOM读取Java中的XML

[英]Reading XML in java using 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;
}

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

Node nNode = datasetallRecords.item(y);

然后像这样的元素

Element eElement = (Element) nNode;

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

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

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

当您创建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();
         }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM