如何在java中获取复杂嵌套xml的属性名、值及其标记名和值

如何在java中获取复杂嵌套xml的属性名、值及其标记名和值,java,xml,dom,Java,Xml,Dom,嗨,我有一个复杂的大型嵌套xml,我必须解析并插入数据库。 我已经用javaxpath完成了,但是速度非常慢 是否有任何方法可以获取以下xml的所有属性名和值以及标记名和值。 这是我的xml。 只需添加更多信息contentSet重复,以及子标签MentalSeriesStatements也重复 <evn:Body mVer="0.0" mjVe="1" contentSet="Mental"> <evn:Operation action="Edit"> <evn:

嗨,我有一个复杂的大型嵌套xml,我必须解析并插入数据库。 我已经用javaxpath完成了,但是速度非常慢

是否有任何方法可以获取以下xml的所有属性名和值以及标记名和值。 这是我的xml。 只需添加更多信息
contentSet
重复,以及子标签
MentalSeriesStatements
也重复

<evn:Body mVer="0.0" mjVe="1" contentSet="Mental">
<evn:Operation action="Edit">
<evn:Data si:type="al:MentalPeriodDataItem">

<al:MentalSeriesPeriod mentalSeriesPeriodIndex="33" mentalSeriesPeriodType="HalfYear" mentalSeriesPeriodEndDate="20000930T00:00:00+00:00">

<al:MentalSeriesId objectType="MentalSeries" objectTypeId="7428374">23984623874</al:MentalSeriesId>

<al:UniqueMentalSet objectType="Mental" objectTypeId="404084">48433426923</al:UniqueMentalSet>

<al:MentalSeriesStatements>


<al:MentalSeriesStatement effectiveTo="20000930T00:00:00+00:00" effectiveFrom="20000330T00:00:00+00:00">
<al:MentalSeriesStatementTypeCode>BAL</al:MentalSeriesStatementTypeCode>
<al:MentalSeriesStatementPeriodId>137</al:MentalSeriesStatementPeriodId>
<al:MentalSeriesStatementSourceId>55</al:MentalSeriesStatementSourceId>
<al:MentalSeriesStatementCurrencyId objectType="Currency" objectTypeId="404014">500186</al:MentalSeriesStatementCurrencyId>
<al:IsUsedForAnalytics>true</al:IsUsedForAnalytics>
</al:MentalSeriesStatement>

<al:MentalSeriesStatement effectiveTo="20000930T00:00:00+00:00" effectiveFrom="20000330T00:00:00+00:00">
<al:MentalSeriesStatementTypeCode>CAS</al:MentalSeriesStatementTypeCode>
<al:MentalSeriesStatementPeriodId>39</al:MentalSeriesStatementPeriodId>
<al:MentalSeriesStatementSourceId>55</al:MentalSeriesStatementSourceId>
<al:MentalSeriesStatementCurrencyId objectType="Currency" objectTypeId="404014">500186</al:MentalSeriesStatementCurrencyId>
<al:IsUsedForAnalytics>true</al:IsUsedForAnalytics>
</al:MentalSeriesStatement>

<al:MentalSeriesStatement effectiveTo="20000930T00:00:00+00:00" effectiveFrom="20000330T00:00:00+00:00">
<al:MentalSeriesStatementTypeCode>FTN</al:MentalSeriesStatementTypeCode>
<al:MentalSeriesStatementPeriodId>39</al:MentalSeriesStatementPeriodId>
<al:MentalSeriesStatementSourceId>55</al:MentalSeriesStatementSourceId>
<al:MentalSeriesStatementCurrencyId objectType="Currency" objectTypeId="404014">500186</al:MentalSeriesStatementCurrencyId>
<al:IsUsedForAnalytics>true</al:IsUsedForAnalytics>
</al:MentalSeriesStatement>

<al:MentalSeriesStatement effectiveTo="20000930T00:00:00+00:00" effectiveFrom="20000330T00:00:00+00:00">
<al:MentalSeriesStatementTypeCode>INC</al:MentalSeriesStatementTypeCode>
<al:MentalSeriesStatementPeriodId>39</al:MentalSeriesStatementPeriodId>
<al:MentalSeriesStatementSourceId>55</al:MentalSeriesStatementSourceId>
<al:MentalSeriesStatementCurrencyId objectType="Currency" objectTypeId="404014">500186</al:MentalSeriesStatementCurrencyId>
<al:IsUsedForAnalytics>true</al:IsUsedForAnalytics>
</al:MentalSeriesStatement>

<al:MentalSeriesStatement effectiveTo="20000930T00:00:00+00:00" effectiveFrom="20000330T00:00:00+00:00">
<al:MentalSeriesStatementTypeCode>SHE</al:MentalSeriesStatementTypeCode>
<al:MentalSeriesStatementPeriodId>39</al:MentalSeriesStatementPeriodId>
<al:MentalSeriesStatementSourceId>55</al:MentalSeriesStatementSourceId>
<al:MentalSeriesStatementCurrencyId objectType="Currency" objectTypeId="404014">500186</al:MentalSeriesStatementCurrencyId>
<al:IsUsedForAnalytics>true</al:IsUsedForAnalytics>
</al:MentalSeriesStatement>

</al:MentalSeriesStatements>

</al:MentalSeriesPeriod>
</evn:Data>

23984623874
48433426923
巴尔
137
55
500186
真的
中科院
39
55
500186
真的
固网
39
55
500186
真的
集成数字控制
39
55
500186
真的
她
39
55
500186
真的
这是我的示例代码

String SeriesPeriodExpression ="/path[@action='"+strAction+"']/Data[@type='"+DataType+"']/mentalSeriesPeriod";
SeriesPeriodExpressionList = (NodeList) xPath.compile(mentalSeriesPeriodExpression).evaluate(xmlDocument, XPathConstants.NODESET);

 String SeriesIdExpr =SeriesPeriodExpression+"/SeriesId";
 NodeList SeriesIdList = (NodeList) xPath.compile(SeriesIdExpr).evaluate(xmlDocument, XPathConstants.NODESET);

 String SeriesId_objectTypeIdExpr =SeriesPeriodExpression+"/SeriesId/@objectTypeId";
 NodeList SeriesId_objectTypeIdExprList = (NodeList) xPath.compile(SeriesId_objectTypeIdExpr).evaluate(xmlDocument, XPathConstants.NODESET);

 String SeriesId_objectTypeExpr =SeriesPeriodExpression+"/SeriesId/@objectType";
 NodeList SeriesId_objectTypeList = (NodeList) xPath.compile(SeriesId_objectTypeExpr).evaluate(xmlDocument, XPathConstants.NODESET);

 for (int i = 0; i < SeriesPeriodExpressionList.getLength(); i++) {
     String SeriesId = "";
     String SeriesId_objectTypeId ="";
     String SeriesId_objectType ="";

     if(SeriesIdList.getLength()==SeriesPeriodExpressionList.getLength()){
         SeriesId = SeriesIdList.item(i).getFirstChild().getNodeValue();
         sbSeriesPeriod.append(SeriesIdList.item(i).getFirstChild().getNodeValue() + "~");
     }

     if(SeriesId_objectTypeIdExprList.getLength()==SeriesPeriodExpressionList.getLength()){
         SeriesId_objectTypeId = SeriesId_objectTypeIdExprList.item(i).getFirstChild().getNodeValue();
         sbSeriesPeriod.append(SeriesId_objectTypeId + "~");
     }

     if(SeriesId_objectTypeList.getLength()==SeriesPeriodExpressionList.getLength()){
          SeriesId_objectType = SeriesId_objectTypeList.item(i).getFirstChild().getNodeValue();
         sbSeriesPeriod.append(SeriesId_objectType + "~");
     }


     String SeriesStatementsExpression ="/ContentEnvelope/Body/ContentItem[@action='"+strAction+"']/Data[@type='"+DataType+"']/SeriesPeriod[@fundamentalSeriesPeriodIndex='"+SeriesPeriod_fundamentalSeriesPeriodIndex+"'][@fundamentalSeriesPeriodEndDate='"+SeriesPeriod_fundamentalSeriesPeriodEndDate+"'][./SeriesId ='"+SeriesId+"']/SeriesStatements/SeriesStatement";
     NodeList SeriesStatementsList = (NodeList) xPath.compile(SeriesStatementsExpression).evaluate(xmlDocument, XPathConstants.NODESET);
     System.out.println(SeriesStatementsList.getLength());
     String SeriesStatementTypeCodeExpr =SeriesStatementsExpression+"/SeriesStatementTypeCode";
     NodeList SeriesStatementTypeCodeList = (NodeList) xPath.compile(SeriesStatementTypeCodeExpr).evaluate(xmlDocument, XPathConstants.NODESET);

     String SeriesStatementPeriodIdExpr =SeriesStatementsExpression+"/SeriesStatementPeriodId";
     NodeList SeriesStatementPeriodIdList = (NodeList) xPath.compile(SeriesStatementPeriodIdExpr).evaluate(xmlDocument, XPathConstants.NODESET);

     String SeriesStatementSourceIdExpr =SeriesStatementsExpression+"/SeriesStatementSourceId";
     NodeList SeriesStatementSourceIdList = (NodeList) xPath.compile(SeriesStatementSourceIdExpr).evaluate(xmlDocument, XPathConstants.NODESET);

     for (int k = 0; k < SeriesStatementsList.getLength(); k++) {
        String SeriesStatementTypeCode ="";
        String SeriesStatementPeriodId = "";
        String SeriesStatementSourceId = "";

            if(UniqueSet_objectTypeIdList.getLength()==SeriesStatementsList.getLength()){
            SeriesStatementTypeCode = SeriesStatementTypeCodeList.item(k).getFirstChild().getNodeValue();
        }
        if(SeriesStatementPeriodIdList.getLength()==SeriesStatementsList.getLength()){
            SeriesStatementPeriodId = SeriesStatementPeriodIdList.item(k).getFirstChild().getNodeValue(); 
        }
        if(SeriesStatementSourceIdList.getLength()==SeriesStatementsList.getLength()){
            SeriesStatementSourceId = SeriesStatementSourceIdList.item(k).getFirstChild().getNodeValue(); 
        }

            }
String SeriesPeriodExpression=“/path[@action='”+strAction+']/Data[@type='“+DataType+']/mentalSeriesPeriod”;
SeriesPeriodExpressionList=(NodeList)xPath.compile(mentalSeriesPeriodExpression.evaluate(xmlDocument,XPathConstants.NODESET);
字符串SeriesIndexPr=SeriesPeriodExpression+“/SeriesId”;
NodeList SeriesIdList=(NodeList)xPath.compile(SeriesIdExpr.evaluate(xmlDocument,XPathConstants.NODESET);
字符串SeriesId_objectTypeIdExpr=serieperiodexpression+“/SeriesId/@objectTypeId”;
NodeList SeriesId_objectTypeIdExprList=(NodeList)xPath.compile(SeriesId_objectTypeIdExpr).evaluate(xmlDocument,XPathConstants.NODESET);
字符串SeriesId_objectTypeExpr=SeriesPeriodExpression+“/SeriesId/@objectType”;
NodeList SeriesId_objectTypeList=(NodeList)xPath.compile(SeriesId_objecttypexpr).evaluate(xmlDocument,XPathConstants.NODESET);
对于(int i=0;i

}

您能显示当前用于获取此数据的代码吗?我正在使用javax path获取此数据。计算节点列表,然后针对每个al:MentalSeriesStatements再次遍历其中的所有节点。我正在计算节点列表,并再次循环以获取正确的记录。但这非常简单。我的主节点列表中有276项,并且然后为每个项目添加15个项目,因此需要5分钟才能获得所有值。我还将保留示例代码。@Ray我已添加了示例代码。。