如何在java中获取复杂嵌套xml的属性名、值及其标记名和值
嗨,我有一个复杂的大型嵌套xml,我必须解析并插入数据库。 我已经用javaxpath完成了,但是速度非常慢 是否有任何方法可以获取以下xml的所有属性名和值以及标记名和值。 这是我的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:
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我已添加了示例代码。。