简体   繁体   中英

How to use the collection()-function with saxonche

I am trying to use the collection() -function using the new saxonche -Python-Module ( https://pypi.org/project/saxonche/ ).

I would expect, that it returns all XML-documents inside the current directory. Instead it just returns None .

My code looks like:

from saxonche import PySaxonProcessor
from os import getcwd

with PySaxonProcessor(license=False) as proc:
    print(proc.version)
    xq = proc.new_xquery_processor()
    xq.set_query_base_uri(getcwd())
    xq.set_query_content("collection('.')/node()")
    r = xq.run_query_to_value()
    print(r)

Any suggestions?

I get the suggested collection('?select=*.xml') to work if I use eg

from pathlib import Path

and then set

xq.set_query_base_uri(Path('.', 'foo.xml').absolute().as_uri())

For the method set_query_base_uri the documentation (ie https://www.saxonica.com/saxon-c/doc12/html/saxonc.html#PyXQueryProcessor-set_query_base_uri ) states:

set_query_base_uri(self, base_uri)

Set the static base URI for the query.

Args: base_uri (str): The static base URI; or None to indicate that no base URI is available

Therefore we need to supply URI as a string. See another solution below which is based on the first one:

  from saxonche import PySaxonProcessor
  from os import getcwd

  with PySaxonProcessor(license=False) as proc:
    print(proc.version)
    xq = proc.new_xquery_processor()
    xq.set_query_base_uri('file://'+getcwd()+'/')
    xq.set_query_content("collection('?select=*.xml')")
    r = xq.run_query_to_value()
    print(r)                                                             

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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