繁体   English   中英

如何将 XML 字符串添加到现有 BaseX 数据库?

[英]How to add an XML string to an existing BaseX database?

使用org.json以及至关重要的JSONArray而不是JSONObject似乎至少成功地通过Twitter4J获得了XML输出。 但是,它显示为:

The Markup In The Document Following The Root Element Must Be Well-formed., Line '1', Column '98'.
The Markup In The Document Following The Root Element Must Be Well-formed.

尝试验证时。

但是,它至少具有XML外观

假设BaseX将充分处理XML ,我希望将文档添加到数据库中:

    new Open(databaseName).execute(context);
    for (int i = 0; i < tweets.length(); i++) {
        jsonStringTweet = tweets.get(i).toString();
        jsonObjectTweet = new org.json.JSONObject(jsonStringTweet);
        stringXml = XML.toString(jsonObjectTweet);
        log.info(stringXml);
        new Add(null, stringXml).execute(context);
    }

参考:

构造函数详细信息

Add public Add(java.lang.String path) Constructor, specifying a target path. The input needs to be set via Command.setInput(InputStream). Parameters: path - target path, optionally terminated by a new file name Add public Add(java.lang.String path, java.lang.String input) Constructor, specifying a target path and an input. Parameters: path - target path, optionally terminated by a new file name. If null, the name of the input will be set as path. input - input file or XML string

但是,我不太符合要求。 输入似乎说它将与XML字符串一起使用,这大概是传递的内容。 这是将XML添加到数据库的正确方法吗?

Java代码:

package basex;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.logging.Logger;
import org.basex.core.BaseXException;
import org.basex.core.Context;
import org.basex.core.cmd.Add;
import org.basex.core.cmd.Open;
import org.basex.core.cmd.CreateDB;
import org.basex.core.cmd.DropDB;
import org.basex.core.cmd.List;
import org.basex.core.cmd.Set;
import org.json.XML;
import twitter4j.JSONArray;
import twitter4j.JSONException;

public class DatabaseHelper {

    private static final Logger log = Logger.getLogger(DatabaseHelper.class.getName());
    private Properties properties = new Properties();
    private URL url = null;
    private String databaseName = null;
    private Context context = null;
    private String parserType = null;

    private DatabaseHelper() {
    }

    public DatabaseHelper(Properties properties) {
        this.properties = properties;
    }

    private void init() throws MalformedURLException, BaseXException {
        log.fine(properties.toString());
        parserType = properties.getProperty("parserType");
        url = new URL(properties.getProperty(parserType + "URL"));
        databaseName = properties.getProperty("databaseName");
        context = new Context();
        list();
    }

    private void list() throws BaseXException {
        log.fine(new List().execute(context));
    }

    private void drop() throws BaseXException {
        new Set("parser", parserType).execute(context);
        new DropDB(databaseName).execute(context);
        list();
    }

    private void create() throws BaseXException, JSONException {
        new Set("parser", parserType).execute(context);
        new CreateDB(databaseName).execute(context);
        new List().execute(context);
        list();
    }

    private void add(JSONArray tweets) throws JSONException, BaseXException {
        long id = 0L;
        String jsonStringTweet = null;
        org.json.JSONObject jsonObjectTweet = null;
        String stringXml = null;

        new Open(databaseName).execute(context);
        for (int i = 0; i < tweets.length(); i++) {
            jsonStringTweet = tweets.get(i).toString();
            jsonObjectTweet = new org.json.JSONObject(jsonStringTweet);
            stringXml = XML.toString(jsonObjectTweet);
            log.info(stringXml);
            new Add(null, stringXml).execute(context);
        }
    }

    public void dropCreateAdd(JSONArray tweets) throws MalformedURLException, BaseXException, JSONException {
        init();
        drop();
        create();
        add(tweets);
        list();
    }

}

有点工作,至少可以添加一个XML文件:

thufir@dur:~/NetBeansProjects/twitterBaseX$ 
thufir@dur:~/NetBeansProjects/twitterBaseX$ basex
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
> 
> list
Name                 Resources  Size    Input Path                               
-------------------------------------------------------------------------------
com.w3schools.books  1          6290    https://www.w3schools.com/xml/books.xml  
db                   1          101838                                           
twitter              15         5203                                             
w3school_data        1          5209    https://www.w3schools.com/xml/note.xml   

4 database(s).
> 
> drop database twitter
Database 'twitter' was dropped.
> 
> list
Name                 Resources  Size    Input Path                               
-------------------------------------------------------------------------------
com.w3schools.books  1          6290    https://www.w3schools.com/xml/books.xml  
db                   1          101838                                           
w3school_data        1          5209    https://www.w3schools.com/xml/note.xml   

3 database(s).
> 
> exit
Have a nice day.
thufir@dur:~/NetBeansProjects/twitterBaseX$ 
thufir@dur:~/NetBeansProjects/twitterBaseX$ gradle clean run                                    

> Task :run                                                                                     
/home/thufir/basex/.basex: writing new configuration file.

BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
thufir@dur:~/NetBeansProjects/twitterBaseX$                                                     
thufir@dur:~/NetBeansProjects/twitterBaseX$ basex                                               
/home/thufir/basex/.basex: Unknown option 'RESTXQERRORS'.
/home/thufir/basex/.basex: writing new configuration file.
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
> 
> list
Name                 Resources  Size    Input Path                               
-------------------------------------------------------------------------------
com.w3schools.books  1          6290    https://www.w3schools.com/xml/books.xml  
db                   1          101838                                           
twitter              15         5203                                             
w3school_data        1          5209    https://www.w3schools.com/xml/note.xml   

4 database(s).
> 
> open twitter
Database 'twitter' was opened in 57.09 ms.
> 
> xquery /
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
<root>
  <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
</root>
Query executed in 232.89 ms.
> 

代码:

        new Open(databaseName).execute(context);
        for (int i = 0; i < tweets.length(); i++) {
            jsonStringTweet = tweets.get(i).toString();
            jsonObjectTweet = new org.json.JSONObject(jsonStringTweet);
            stringXml = XML.toString(jsonObjectTweet);
            log.fine(stringXml);
            new Add(null, "data.xml").execute(context);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM