【问题标题】:XML parsing to a SQL codeXML 解析为 SQL 代码
【发布时间】: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" 那是不可能的..
  • 我应该知道我要解析的文件的格式吗?
  • 对于这种格式,您至少需要一些“基本规则”。如果我给你&lt;Foo&gt;&lt;Bar/&gt;&lt;/Foo&gt;,你会怎么做??
  • 提示:您应该看看 XSLt。 XSL 可以将 XML 转换为任何其他格式(XML、CSV、文本)。易于操作,可用于任何语言或系统命令行工具。
  • 当你需要一些mysql中的动态sql时,你可以使用prepared statements。这是example,准备好的语句有多强大。

标签: java mysql sql jsoup


【解决方案1】:

在不知道架构是什么的情况下将 XML 文档的数据插入到表中是不可能的,除非您计划每次获得具有新架构的 XML 文档时都创建一个新表。您可能设置了具有架构 A 和架构 B 的表,但是如果您获得了具有架构 C 的 XML 文件,它将不适合任何一个表,因此构建一个 INSERT 不会让您有任何收获。

如果您有 XML 文件可能的一系列架构,我会在您的 Java 中设置某种测试来确定架构(可能使用一组 XSD 文件)并选择将数据转储到适当的表中,然后基于该表构建和执行 SQL 语句。

如果您确实希望能够获取 ANY XML 文件并将其放入数据库,您可能需要查看this StackOverflow 问题。一旦您从收到的任何 XML 文件中获得了 XSD,您应该能够在 Java 中将其解析出来并生成构建适合它的表所需的 SQL,然后解析 XML 文件并将其放入其中。老实说,我会质疑为什么您不知道收到的文件的格式,看看您是否可以确定格式并选择第一个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多