You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台程序创建BaseX数据库并输出XML文件问题求助

解决C# BaseX控制台程序无法输出XML文件的问题

问题根源

  1. 输出对象错误:Console.WriteLine(query)直接打印Query类的默认字符串表示(即类名BaseXClient.Query),而非查询结果。
  2. 查询语法错误:XQuery规范中不存在FIND关键字,原语句FIND FOR $x IN //CATALOG RETURN $x/book不符合语法,导致解析报错。
  3. 命令执行方式错误:CREATE DATABASE属于BaseX系统命令,需用session.Execute()执行,而非用于XQuery查询的session.Query()。

修改后的完整代码

using System;
using BaseXClient;

namespace LR4_BaseX
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立BaseX会话连接,用using自动管理资源
            using (var session = new Session("localhost", 1984, "admin", "admin"))
            {
                try
                {
                    // 执行创建数据库的系统命令
                    session.Execute("CREATE DATABASE myDB C:/DB/PRIM/BOOKS/books.xml");

                    // 使用标准XQuery语法编写查询语句
                    string sqry = "FOR $x IN //CATALOG RETURN $x/book";
                    using (var query = session.Query(sqry))
                    {
                        // 循环读取并输出所有查询结果
                        while (query.More())
                        {
                            Console.WriteLine(query.Next());
                        }
                    }
                }
                catch (Exception ex)
                {
                    // 捕获并输出异常信息
                    Console.WriteLine($"执行错误:{ex.Message}");
                }
                finally
                {
                    session.Close();
                }
                Console.ReadKey();
            }
        }
    }
}

关键修改说明

  • 数据库创建:改用session.Execute()执行CREATE DATABASE命令,确保数据库正确初始化。
  • 查询语句修正:移除无效的FIND关键字,使用符合XQuery规范的查询语句。
  • 结果输出:通过while (query.More())循环调用query.Next()逐条获取并输出查询结果,替代直接打印Query对象的错误方式。
  • 资源管理:使用using语句自动释放Session和Query资源,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Michael_Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:05:17