用Java解析XML以检索字段

时间:2017-10-08 09:33:09

标签: java xml-parsing

我需要解析下面的格式xml并根据我必须生成新xml的值。

<transactionDataSection>
            <FIELD name="VAR11" value="Subash"/>
            <FIELD name="VAR10" value="India"/>
            <FIELD name="VAR9" value="XXXX"/>
            <FIELD name="VAR8" value="YYYY"/>
<TableDataSection>
                    <table>
                        <tableName>12345678</tableName>
                        <row>
                            <rowNumber>1</rowNumber>
                            <rowData>
                                <FIELD name="VAR1" value="Val1"/>
                                <FIELD name="VAR2" value="Val2"/>
                                <FIELD name="VAR3" value="Val3"/>
                            </rowData>
                        </row>
                        <row>
                            <rowNumber>2</rowNumber>
                            <rowData>
                                <FIELD name="VAR4" value="Val4"/>
                                <FIELD name="VAR5" value="Val5"/>
                                <FIELD name="VAR6" value="Val6"/>
                            </rowData>
                        </row>
                    </table>
</TableDataSection>
</transactionDataSection>

在这里,我面临着检索字段名称和值的挑战。这里我需要分别在事务数据部分内部的字段名称和值以及表数据部分来构造新的xml。 已尝试使用DOM解析器,但它提供了所有字段名称和值。

NodeList transactionDataSectionNodeList = document.getElementsByTagName("transactionDataSection");
                for(int i=0;i<transactionDataSectionNodeList.getLength();i++){
                      Node transactionDataSectionNode = transactionDataSectionNodeList.item(i);
                      if(transactionDataSectionNode.getNodeType() == Node.ELEMENT_NODE){
                             Element eElement = (Element) transactionDataSectionNode;
                             NodeList fieldList = eElement.getChildNodes();
                             for(int y=0;y<fieldList.getLength();y++){
                                    Node fieldNode = fieldList.item(y);
                                    if(fieldNode.getNodeType() == Node.ELEMENT_NODE){
                                        Element element=(Element) fieldNode;
                                           if(fieldNode.getNodeName().equals("FIELD")){
                                               Element field2 = doc.createElement("field");
                                               Element name2 = doc.createElement("name");
                                               Element value2 = doc.createElement("value");
                                               /*System.out.println("name : "+element.getAttribute("name"));
                                               System.out.println("value : "+element.getAttribute("value"));*/
                                               name2.appendChild(doc.createTextNode(element.getAttribute("name")));
                                               value2.appendChild(doc.createTextNode(element.getAttribute("value")));
                                               field2.appendChild(name2);
                                               field2.appendChild(value2);
                                               Transaction_data.appendChild(field2);
                                           }
                                    }
                             }
                      }
                }

但我想分别在事务数据部分内的字段名称和表数据部分。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

TableDataSection

的孩子
  

transactionDataSection

,当你这样做时

Element eElement = (Element) transactionDataSectionNode;
                             NodeList fieldList = eElement.getChildNodes();

你也得到了TableDataSection。

您可以做的是,对于每个子节点都有一个检查,

if(fieldNode.getNodeName().equals("TableDataSection"){
callXMLGenerationForTableDataSection(fieldNode);
}