【发布时间】:2018-01-13 22:45:39
【问题描述】:
我将获得包含 XML 代码的文件夹。我需要将所有代码放入数据库中,因此我需要一种将 XML 解析为 SQL 的算法。
private static void parseXml(String xml) {
Document doc = Jsoup.parse(xml);
StringBuilder queryBuilder;
StringBuilder columnNames;
StringBuilder values;
for (Element row : doc.select("row")) {
// Start the query
queryBuilder = new StringBuilder("insert into customer(");
columnNames = new StringBuilder();
values = new StringBuilder();
for (int x = 0; x < row.children().size(); x++) {
// Append the column name and it's value
columnNames.append(row.children().get(x).tagName());
values.append(row.children().get(x).text());
if (x != row.children().size() - 1) {
// If this is not the last item, append a comma
columnNames.append(",");
values.append(",");
}
else {
// Otherwise, add the closing paranthesis
columnNames.append(")");
values.append(")");
}
}
// Add the column names and values to the query
queryBuilder.append(columnNames);
queryBuilder.append(" values(");
queryBuilder.append(values);
// Print the query
System.out.println(queryBuilder);
}
}
输入:
<Customers>
<row>
<CustId>1</CustId>
<Name>Woodworks</Name>
<City>Baltimore</City>
</row>
<row>
<CustId>2</CustId>
<Name>Software Solutions</Name>
<City>Boston</City>
</row>
<row>
<CustId>3</CustId>
<Name>Food Fantasies</Name>
<City>New York</City>
</row>
</Customers>
输出:
insert into customer(custid,name,city) values(1,Woodworks,Baltimore)
insert into customer(custid,name,city) values(2,Software Solutions,Boston)
insert into customer(custid,name,city) values(3,Food Fantasies,New York)
此代码的问题是硬编码为仅适用于该格式。 我需要一个通用的算法,以便它可以运行任何 xml 代码并提取数据。 到目前为止我还不知道我会得到的 xml 文件的格式。
你能帮我建立一个算法,给我任何 XML 文件的 SQL 语句吗?谢谢。
【问题讨论】:
-
"any xml" 那是不可能的..
-
我应该知道我要解析的文件的格式吗?
-
对于这种格式,您至少需要一些“基本规则”。如果我给你
<Foo><Bar/></Foo>,你会怎么做?? -
提示:您应该看看 XSLt。 XSL 可以将 XML 转换为任何其他格式(XML、CSV、文本)。易于操作,可用于任何语言或系统命令行工具。
-
当你需要一些mysql中的动态sql时,你可以使用prepared statements。这是example,准备好的语句有多强大。