gpt4 book ai didi

xml - 如何使用 xqilla 命令行工具为 xpath 定义命名空间?

转载 作者:行者123 更新时间:2023-12-03 16:11:33 25 4
gpt4 key购买 nike

我正在尝试使用一些 xpath 表达式从 XML 文件中提取信息,如下所示(它是 OAI-PMH 协议(protocol)响应):

<?xml version="1.0" encoding="UTF-8"?>

<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2013-10-11T09:24:55Z</responseDate>
<request verb="ListRecords" metadataPrefix="oai_dc">http://request.url.com/oai</request>
<ListRecords>
<record>
<header>
<identifier>oai:identifier:item1</identifier>
<datestamp>2012-06-07T12:03:53Z</datestamp>
<setSpec>set:identifier</setSpec>
</header>
<metadata>
<oai_dc:dc
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:title xml:lang="en-US">Title</dc:title>
<dc:creator>creator</dc:creator>
<dc:description xml:lang="en-US">abstract</dc:description>
<dc:publisher xml:lang="en-US">publisher</dc:publisher>
<dc:contributor xml:lang="en-US"></dc:contributor>
<dc:date>2011-10-18</dc:date>
<dc:type xml:lang="en-US"></dc:type>
<dc:format>application/pdf</dc:format>
<dc:identifier>identifier</dc:identifier>
<dc:source xml:lang="en-US">source</dc:source>
</oai_dc:dc>
</metadata>
</record>
<record>
...
</record>
...
</ListRecords>
</OAI-PMH>

最终我将不得不编写一些 Java 代码来执行此操作,但我想了解更多关于 xpath 和命名空间的信息,因此我使用命令行工具 xqilla。

经过一些研究(例如 this )和许多失败的尝试后,我尝试了以下表达式:
//*[local-name()='title']

但我收到以下错误:
:1:22: error: No namespace for prefix 'xs' [err:XPST0081]

有人可以指出我正确的方向吗? xqilla 的文档到目前为止,还没有证明很有帮助。

谢谢。

编辑:由于标题不完全是这里要问的,一个后续(更一般的)问题是如何使用 xqilla 定义一般的命名空间?因为如果我尝试表达:
//dc:title

我得到的错误是
/tmp/foo.xq:1:3: error: No namespace for prefix 'dc' [err:XPST0081]

我正在像这样运行 xqilla:
xqilla -p -i oai_response.xml foo.xq

最佳答案

XQilla 可以执行 XPath,但默认情况下它使用 XQuery。

您可以像这样创建一个 xquery 文件,例如:my.file.xquery

declare namespace dc="http://purl.org/dc/elements/1.1/";
doc("my.file.xml")//dc:title

然后运行它
xqilla my.file.xquery

如果您只想使用 xpath,我不确定如何指定命名空间
您可以做的是使用命名空间通配符。所以把它放在 my.file.xpath
//*:title

并运行它
xqilla -p -i my.file.xpath my.file.xml

关于xml - 如何使用 xqilla 命令行工具为 xpath 定义命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19357644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com