首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xqilla命令行工具定义xpath的名称空间?

如何使用xqilla命令行工具定义xpath的名称空间?
EN

Stack Overflow用户
提问于 2013-10-14 17:55:16
回答 1查看 1.3K关注 0票数 2

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

代码语言:javascript
复制
<?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)和多次失败的尝试后,我尝试了以下表达式:

代码语言:javascript
复制
//*[local-name()='title']

但我得到以下错误:

代码语言:javascript
复制
:1:22: error: No namespace for prefix 'xs' [err:XPST0081]

有人能告诉我怎么走吗?到目前为止,xqilla的文档还没有被证明是非常有用的。

谢谢。

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

代码语言:javascript
复制
//dc:title

我得到的错误是

代码语言:javascript
复制
/tmp/foo.xq:1:3: error: No namespace for prefix 'dc' [err:XPST0081]

我像这样运行xqilla:

代码语言:javascript
复制
xqilla -p -i oai_response.xml foo.xq
EN

回答 1

Stack Overflow用户

发布于 2014-09-19 16:25:56

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

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

代码语言:javascript
复制
declare namespace dc="http://purl.org/dc/elements/1.1/";
doc("my.file.xml")//dc:title

然后运行它

代码语言:javascript
复制
xqilla my.file.xquery

如果您只想使用xpath,我不知道如何指定名称空间,您可以做的就是使用名称空间通配符。所以把这个放到my.file.xpath中

代码语言:javascript
复制
//*:title

并使用以下命令运行

代码语言:javascript
复制
xqilla -p -i my.file.xpath my.file.xml
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19357644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档