问题是什么
我正在尝试使用BaseX在VS Code中运行XQuery,但每次使用XML工具执行查询时,由于命令的执行返回错误代码,因此失败了。
如何知道这是问题所在?
在扩展程序的存储库上,它说:
执行引擎的输出通过操作系统的标准输出获得。如果进程退出时带有任何代码而不是 0,则 stdout 中写入的任何内容都会显示为错误消息。如果 stdout 中的内容包含行号,则错误提示将包含一个按钮,可将您带到相应的行。
当我运行我的查询时收到的结果是作为错误输出的确切的查询结果,正如上述引用所述,这是您预期的结果。
我如何配置settings.json文件
在上述存储库中,settings.json
的编写如下:
{
"xmlTools.xqueryExecutionEngine": "C:\\Program Files (x86)\\Altova\\AltovaXML2008\\AltovaXML.exe",
"xmlTools.xqueryExecutionArguments": [
"-xquery", "$(script)",
"-in", "$(input)"
"-out", "$(input).output.xml"
]
}
但我正在使用BaseX,所以我尝试使用它来创造上述等效内容:
"xmlTools.xqueryExecutionEngine": "basex.bat",
"xmlTools.xqueryExecutionArguments": [
"$(script)",
"-i", "$(input)",
"-o", "output.xml"
],
根据basex文档,这似乎是正确的执行方式。
注意:
- 如果output.xml还不存在,则Windows会发送错误代码9009。为了解决这个问题,我只使用预定义的文件,但如果有办法避免出现此问题并且仅创建文件而不出错,那么我很想知道如何解决。
- 写入以下内容
备用settings.json
"xmlTools.xqueryExecutionArguments": [
"-o", "output.xml",
"$(script)",
],
这个方法不起作用,虽然在cmd中我必须这样写(在包含输入文件的情况下也尝试过,但是在我的特定情况下不需要使用它,因此我尝试了两种方法)。
可行的方法
在cmd
中,可以通过以下方式编写:
basex -o output.xml data.xq
如果存在output.xml
,则运行成功。
echo %ErrorLevel%
返回值为0
。
我有点困惑如何将 settings.json
翻译到命令提示符中,因此我不确定如何在我的命令提示符中重现遇到的问题。如果有一种方式可以忽略退出代码(并防止停止执行我的命令),那么这将解决我的问题。更好的方法是找到正确的方法来编写 settings.json
以允许我从 VS Code 运行我的 XQuery。
测试数据
为了测试的缘故,这里是我使用的文件
data.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="personType">
<xs:sequence>
<xs:element name="fname" type="xs:string"/>
<xs:element name="minit" type="xs:string"/>
<xs:element name="lname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="peopleType">
<xs:sequence>
<xs:element name="person" type="personType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="peopleDB" type="peopleType"></xs:element>
</xs:schema>
data.xml
<?xml version="1.0" ?>
<peopleDB xsi:noNamespaceSchemaLocation="data.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<person>
<fname>John</fname>
<minit>A</minit>
<lname>Roger</lname>
</person>
<person>
<fname>Fred</fname>
<minit>X</minit>
<lname>Gerald</lname>
</person>
</peopleDB>
data.xq
<personDB>
{
let $d:=doc("data.xml") for $p in
$d/peopleDB/person
return $p
}
</personDB>