gpt4 book ai didi

java - 如何使用 XPath 提取 XML 表数据

转载 作者:行者123 更新时间:2023-12-01 13:51:54 24 4
gpt4 key购买 nike

<table index="1" title=" Final year marks of BIT students" ref="BIT results">
<headings>
<heading>Semester1</heading>
<heading>Semester2</heading>
<heading>Semester3</heading>
<heading>Semester4</heading>
<heading>Grade</heading>
<heading>FYP</heading>
</headings>
<tablebody>
<tablerow>
<tablecell><item>10</item></tablecell>
<tablecell><item>12</item></tablecell>
<tablecell><item>13</item></tablecell>
<tablecell><item>15</item></tablecell>
<tablecell><item>B</item></tablecell>
<tablecell><item>B</item></tablecell>
</tablerow>
</tablebody>
</table>
<table index="2" title="Final year marks of COM students" ref="COM results">
<headings>
<heading>Semester1</heading>
<heading>Semester2</heading>
<heading>Semester3</heading>
<heading>Semester4</heading>
<heading>Grade</heading>
<heading>FYP</heading>
</headings>
<tablebody>
<tablerow>
<tablecell><item>15</item></tablecell>
<tablecell><item>15</item></tablecell>
<tablecell><item>15</item></tablecell>
<tablecell><item>14</item></tablecell>
<tablecell><item>A</item></tablecell>
<tablecell><item>A</item></tablecell>
</tablerow>
<tablerow>
<tablecell><item>10</item></tablecell>
<tablecell><item>5</item></tablecell>
<tablecell><item>9</item></tablecell>
<tablecell><item>11</item></tablecell>
<tablecell><item>C</item></tablecell>
<tablecell><item>C</item></tablecell>
</tablerow>
</tablebody>
</table>``

嗨,我是 Xpath 的新手。我需要使用 Xpath 提取 XML 表数据。这是我的 XML 代码。我已经尝试过,但无法获得成功的输出。

The output table would be like this 

semester1 semester2 semester3 semester4 grade fyp
10 11 13 12 A B

有人知道解决这个问题的最佳方法吗?谢谢:)

最佳答案

首先,您的示例 XML 无效。您要么提供了两个单独的示例,要么缺少周围的父标记。

我假设了第二个并将示例包装在 <tables></tables> 中标签。

所以现在基于此...

<tables>
<table index="1" title=" Final year marks of BIT students" ref="BIT results">
<headings>
<heading>Semester1</heading>
<heading>Semester2</heading>
<heading>Semester3</heading>
<heading>Semester4</heading>
<heading>Grade</heading>
<heading>FYP</heading>
</headings>
<tablebody>
<tablerow>
<tablecell>
<item>10</item>
</tablecell>
<tablecell>
<item>12</item>
</tablecell>
<tablecell>
<item>13</item>
</tablecell>
<tablecell>
<item>15</item>
</tablecell>
<tablecell>
<item>B</item>
</tablecell>
<tablecell>
<item>B</item>
</tablecell>
</tablerow>
</tablebody>
</table>
<table index="2" title="Final year marks of COM students" ref="COM results">
<headings>
<heading>Semester1</heading>
<heading>Semester2</heading>
<heading>Semester3</heading>
<heading>Semester4</heading>
<heading>Grade</heading>
<heading>FYP</heading>
</headings>
<tablebody>
<tablerow>
<tablecell>
<item>15</item>
</tablecell>
<tablecell>
<item>15</item>
</tablecell>
<tablecell>
<item>15</item>
</tablecell>
<tablecell>
<item>14</item>
</tablecell>
<tablecell>
<item>A</item>
</tablecell>
<tablecell>
<item>A</item>
</tablecell>
</tablerow>
<tablerow>
<tablecell>
<item>10</item>
</tablecell>
<tablecell>
<item>5</item>
</tablecell>
<tablecell>
<item>9</item>
</tablecell>
<tablecell>
<item>11</item>
</tablecell>
<tablecell>
<item>C</item>
</tablecell>
<tablecell>
<item>C</item>
</tablecell>
</tablerow>
</tablebody>
</table>
</tables>

我能够使用...

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class TestXPath {

public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("Table.xml"));

XPathFactory xFactory = XPathFactory.newInstance();
XPath path = xFactory.newXPath();
XPathExpression exp = path.compile("/tables/table");
NodeList nlTables = (NodeList) exp.evaluate(doc, XPathConstants.NODESET);
for (int tblIndex = 0; tblIndex < nlTables.getLength(); tblIndex++) {

Node table = nlTables.item(tblIndex);
Node nAtt = table.getAttributes().getNamedItem("title");
System.out.println("Showing results for " + (nAtt == null ? "[Unknown]" : nAtt.getTextContent()));

exp = path.compile("headings/heading");
NodeList nlHeaders = (NodeList) exp.evaluate(table, XPathConstants.NODESET);
Set<String> headers = new HashSet<String>(25);
for (int index = 0; index < nlHeaders.getLength(); index++) {
headers.add(nlHeaders.item(index).getTextContent().trim());
}

for (String header : headers) {
System.out.printf("%-20s", header);
}
System.out.println("");

exp = path.compile("tablebody/tablerow");
NodeList nlRows = (NodeList) exp.evaluate(table, XPathConstants.NODESET);
for (int index = 0; index < nlRows.getLength(); index++) {
Node rowNode = nlRows.item(index);
exp = path.compile("tablecell/item");
NodeList nlValues = (NodeList) exp.evaluate(rowNode, XPathConstants.NODESET);
List<String> values = new ArrayList<String>(25);
for (int valueIndex = 0; valueIndex < nlValues.getLength(); valueIndex++) {
values.add(nlValues.item(valueIndex).getTextContent().trim());
}
for (String value : values) {
System.out.printf("%-20s", value);
}
System.out.println("");
}
System.out.println("");
}

} catch (ParserConfigurationException exp) {
exp.printStackTrace();
} catch (SAXException | IOException | XPathExpressionException ex) {
ex.printStackTrace();
}
}

}

生产...

Showing results for  Final year marks of BIT students
Semester1 Semester2 Semester3 Semester4 FYP Grade
10 12 13 15 B B

Showing results for Final year marks of COM students
Semester1 Semester2 Semester3 Semester4 FYP Grade
15 15 15 14 A A
10 5 9 11 C C

基本上,您需要能够将每个部分分解为可管理的部分......

看看XPath Tutorial并阅读 SO 上关于 XPath 的几乎所有帖子;)

关于java - 如何使用 XPath 提取 XML 表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com