Saravanan666/pypi-org huggingface dataset:
Package: xml_orm
This library is inspired by Django object to relation layer. XML document schemas are represented by Python classes with fields corresponding to nested elements and attributes. Document namespaces and encodings are stored as class Meta information. Object instances are transparently loaded from XML documents, with validation on load and save operations. Object-oriented approach allows reusing of schema elements by inheritance and overriding of XML elements and attributes represented by Python class members. XML namespaces, serialization an de-serialization to different encodings and optional schema validation are supported, along with most common XSD types to Python objects mapping. XSD inspection utility is provided for conversion of existing XSD schemas to Python objects (very much work in progress, but usable for simple schemas). Documentation is work in progress, mostly in Russian. For reference see source of test.py which showcases all current features.
Package: xmlparsing
XMLParsing is an easy-to-use Python 3 parser for compiling, transforming, encoding and decoding XML files and text.XMLParsing installation:Run this in your command prompt/shellpip install xmlparsingXMLParsing convert dictionary:xmlparsing.dict2xmlINPUT:importxmlparsingmyDict={"numbers":[1,2,3],"letters":["a","b","c"],"text":"Lorem ipsum dolor sit amet"}print(xmlparsing.dict2xml(myDict,title="all"))OUTPUT:<?xml version="1.0" encoding="UTF-8"?><all><numbers><itemi="0">1</item><itemi="1">2</item><itemi="2">3</item></numbers><letters><itemi="0">a</item><itemi="1">b</item><itemi="2">c</item></letters><text>Loremipsumdolorsitamet</text></all>In the above, you can see that the "title" attribute in xmlparsing.dict2xml is what defines the tag that your entire document will be inside.XMLParsing convert JSON file:xmlparsing.jsonfil2xmlINPUT:importxmlparsingprint(xmlparsing.jsonfile2xml('myStorage.json')The file "myStorage.json":{"numbers":[1,2,3],"letters":["a","b","c"],"text":"Lorem ipsum dolor sit amet"}OUTPUT:<?xml version="1.0" encoding="UTF-8"?><myStorage><numbers><itemi="0">1</item><itemi="1">2</item><itemi="2">3</item></numbers><letters><itemi="0">a</item><itemi="1">b</item><itemi="2">c</item></letters><text>Loremipsumdolorsitamet</text></myStorage>XMLParsing format XML:xmlparsing.formatxmlINPUT:importxmlparsingprint(xmlparsing.formatxml('<?xml version="1.0" encoding="UTF-8"?> <all> <numbers> <item i="0">1</item> <item i="1">2</item> <item i="2">3</item> </numbers> <letters> <item i="0">a</item> <item i="1">b</item> <item i="2">c</item> </letters> <text>Lorem ipsum dolor sit amet</text> </all>'))OUTPUT:<?xml version="1.0" encoding="UTF-8"?><all><numbers><itemi="0">1</item><itemi="1">2</item><itemi="2">3</item></numbers><letters><itemi="0">a</item><itemi="1">b</item><itemi="2">c</item></letters><text>Loremipsumdolorsitamet</text></all>The code above cleans up XML.XMLParsing convert XML to dictionary:xmlparsing.xml2dictINPUT:importxmlparsingprint(xmlparsing.xml2dict('''<all><numbers><item i="0">1</item><item i="1">2</item><item i="2">3</item></numbers><letters><item i="0">a</item><item i="1">b</item><item i="2">c</item></letters><text>Lorem ipsum dolor sit amet</text></all>'''))OUTPUT:{'all':{'numbers':{'item':[{'@i':'0','#text':'1'},{'@i':'1','#text':'2'},{'@i':'2','#text':'3'}]},'letters':{'item':[{'@i':'0','#text':'a'},{'@i':'1','#text':'b'},{'@i':'2','#text':'c'}]},'text':'Lorem ipsum dolor sit amet'}}XMLParsing convert XML to JSON:xmlparsing.xml2jsonINPUT:importxmlparsingprint(xmlparsing.xml2json('''<all><numbers><item i="0">1</item><item i="1">2</item><item i="2">3</item></numbers><letters><item i="0">a</item><item i="1">b</item><item i="2">c</item></letters><text>Lorem ipsum dolor sit amet</text></all>'''))OUTPUT:{"all":{"letters":{"item":[{"#text":"a","@i":"0"},{"#text":"b","@i":"1"},{"#text":"c","@i":"2"}]},"numbers":{"item":[{"#text":"1","@i":"0"},{"#text":"2","@i":"1"},{"#text":"3","@i":"2"}]},"text":"Lorem ipsum dolor sit amet"}}THE END!Enjoy using XMLParsing!
Package: xmlpatcher
XML PatcherA convenient library for patching XML files with XPath.Usage example:fromxmlpatcherimportXMLDocumentfromxmlpatcher.patchesimportSetValue,Removedocument=XMLDocument("./example.xml")document.patch(SetValue("/Book/@color","red"),Remove("/Book/Page[1]"))document.save()The above code will transform this file:<Bookcolor="blue"><Page>Welcome</Page><Page>Goodbye</Page></Book>Into this:<Bookcolor="red"><Page>Goodbye</Page></Book>
Package: xmlpolymerase
Overviewxmlpolymerase is a simple powerful serializer and deserializer for
python-structures into XML. Possible structures are string, int, float, bool,
list and dict.The primary function of a polymerase is the polymerization of new DNA or RNA
against an existing DNA or RNA template in the processes of replication and
transcription.(Cite: Wikipeadiahttp://en.wikipedia.org/wiki/Polymerase)UsageThis is a pure python module. The API is pretty simple, for more read the
docstrings, an exampkle follows:>>> from odict import OrderedDict
>>> teststructure = OrderedDict()
>>> teststructure['one'] = 'Eins'
>>> teststructure['two'] = 'Zwei'
>>> teststructure['three'] = 'Drei'
>>> teststructure['four'] = [True, 2, '3-2', 42.23]
>>> domnode = serialize(structure, nodename='object')
>>> print domnode.toprettyxml()
<object>
    <one>
            Eins
    </one>
    <two>
            Zwei
    </two>
    <three>
            Drei
    </three>
    <four type="list">
            <entry type="bool">
                    True
            </entry>
            <entry type="int">
                    2
            </entry>
            <entry>
                    3-2
            </entry>
            <entry type="float">
                    42.23
            </entry>
    </four>
</object>
<BLANKLINE>>>> structure = deserialze(domnode)
OrderedDict([('one', 'Eins'), ('two', 'Zwei'), ('three', 'Drei'), ('four', [True, 2, '3-2', 23.42])])Thanksto Nicola Larosa and Michael Foord for the OrderedDict implementation, which is
used and copied (unmodified) into this package inodict.pyhere. The code
was published under a BSD-License. For details please read the contents of the
file.LicenseAll code exceptodict.pyis under the GNU General Public License GPL 2.0 or
later.Copyright and AuthorsCopyright, BlueDynamics Alliance, Austriaauthor: Jens Klein <jens@bluedynamics.com>Feedback, Bugreports, …If you like to give the author feedback about this product just write a mail
to <dev@bluedynamics.com>.If you have access to theplone.orgcollectiveyou might want to commit
bug-fixes direct to trunk or do enhancements on a branch. Anyway, the author
would be happy to get a short mail about those changes.– Jens Klein <jens@bluedynamics.com>
Package: xmlpumpkin
Parse XMLs fromCaboChaand provides simple tree accessors.UsageExpected usages are focused on chunk surfaces and dependency links:>>> aisansan = xmlpumpkin.parse_to_tree(
...     u'愛燦々とこの身に降って心密かなうれしい涙を流したりして'
... )
>>> len(aisansan.chunks)
8
>>> print(aisansan.root.surface)
流したりして
>>> print(aisansan.root.func_surface)
て
>>> for dep in aisansan.root.linked:
...     print(dep.surface)
...
降って
涙をYou need CaboCha in your path, or shortly with prepared XML:>>> tree = xmlpumpkin.Tree(xml_as_unicode)Should you need an easy interface from Python to CaboCha:>>> from xmlpumpkin import cabocha
>>> print(cabocha.txttree(
...     u'愛燦々とこの身に降って心密かなうれしい涙を流したりして'
... ))
    愛燦々と-----D
          この-D |
            身に-D
            降って-------D
            心密かな---D |
              うれしい-D |
                    涙を-D
              流したりして
EOS
>>> print(cabocha.as_xml(
...     u'愛燦々とこの身に降って心密かなうれしい涙を流したりして'
... ))
<sentence>
  ...
</sentence>All I/Os are unicodes!
If encodings other than UTF-8 is preferred, directly modify following constants:>>> import xmlpumpkin.runner
>>> xmlpumpkin.runner.CABOCHA_ENCODING = 'SJIS'
>>>
>>> import xmlpumpkin.tree
>>> xmlpumpkin.tree.XML_ENCODING = 'SJIS'PropertiesNot enough but a few properties are provided viaTreeandChunkobjects.class xmlpumpkin.Tree(cabocha_xml)chunks - tuple of chunksroot - root (not depending on any chunks) Chunk objectchunk_by_id(chunk_id) - get Chunk object by its id generated by CaboCha_element - origin XML as lxml Element objectclass xmlpumpkin.Chunk(element, parent)id - chunk idlink_to_id - its depending chunk idlinked_from_ids - tuple of chunk id depending to this chunkfunc_id - functional token id of this chunkdep - its depending Chunk objectlinked - list of all Chunk objects depending to this chunksurface - surface of this chunkfunc_surface - surface of this chunk’s functional token_tokens() - its containing tokens as lxml Element objects
Package: xmlpydict
xmlpydict 📑Requirementspython 3.7+InstallationTo install xmlpydict, using pip:pipinstallxmlpydictQuickstart>>>fromxmlpydictimportparse>>>parse("<package><xmlpydict language='python'/></package>"){'package':{'xmlpydict':{'@language':'python'}}}>>>parse("<person name='Matthew'>Hello!</person>"){'person':{'@name':'Matthew','#text':'Hello!'}}GoalsCreate a consistent parsing strategy between XML and Python dictionaries. xmlpydict takes a more laid-back approach to enforce the syntax of XML. However, still ensures fast speeds by using finite automata.Featuresxmlpydict allows for multiple root elements.
The root object is treated as the Python object.xmlpydict supports the followingCDataSection:  CDATA Sections are stored as {'#text': CData}.Comments:  Comments are tokenized for corectness, but have no effect in what is returned.Element Tags:  Allows for duplicate attributes, however only the latest defined will be taken.Characters:  Similar to CDATA text is stored as {'#text': Char} , however this text is stripped.dict.get(key[, default]) will not cause exceptions# Empty tags are containers>>>fromxmlpydictimportparse>>>parse("<a></a>"){'a':{}}>>>parse("<a/>"){'a':{}}>>>parse("<a/>").get('href')None>>>parse(""){}Attribute prefixing# Change prefix from default "@" with keyword argument attr_prefix>>>fromxmlpydictimportparse>>>parse('<p width="10" height="5"></p>',attr_prefix="$"){"p":{"$width":"10","$height":"5"}}Exceptions# Grammar and structure of the xml_content is checked while parsing>>>fromxmlpydictimportparse>>>parse("<a></ a>")Exception:notwellformed(violationatpos=5)UnsupportedProlog / Enforcing Document Type Definition and Element Type DeclarationsEntity ReferencingNamespaces
Package: xmlpylighter
xmlpylighter is a tiny web page to pretty print and compare xml filesusageLaunching$ xmlpylighterthat’s all.xmlpylighter will start a small server
(by default, serving tohttp://localhost:8080)Just go to your browser, paste one or two xml text and submitinstallation(don’t hesitate to install inside a virtualenv)$ pip install xmlpylighterproject dependenciesbottlepygmentslxmlVersion Historyv0.1first versionserve simple http pagepretty print and highlight one or two xmlshow diff if two xml are provided
Package: xmlrecords
XML Recordsxmlrecordsis a user-friendly wrapper oflxmlpackage for extraction of tabular data from XML files.This data provider sends all his data in... XML. You know nothing about XML, except that it looks kind of weird and you woulddefinitelynever use it for tabular data. How could you just transform all this XML nightmare into a sensible tabular format, like a DataFrame? Don't worry: you are in the right place!InstallationpipinstallxmlrecordsThe package requirespython 3.7+and one external dependencylxml.UsageBasic exampleUsually, you only need to specify path to table rows; optionally, you can specify paths to any extra data you'd like to add to your table:# XML objectxml_bytes=b"""\<?xml version="1.0" encoding="utf-8"?><Catalog><Library><Name>Virtual Shore</Name></Library><Shelf><Timestamp>2020-02-02T05:12:22</Timestamp><Book><Title>Sunny Night</Title><Author alive="no" name="Mysterious Mark"/><Year>2017</Year><Price>112.34</Price></Book><Book><Title>Babel-17</Title><Author alive="yes" name="Samuel R. Delany"/><Year>1963</Year><Price>10</Price></Book></Shelf></Catalog>"""# Transform XML to records (= a list of key-value pairs)importxmlrecordsrecords=xmlrecords.parse(xml=xml_bytes,records_path=['Shelf','Book'],# The rows are XML nodes with the repeating tag <Book>meta_paths=[['Library','Name'],['Shelf','Timestamp']],# Add additional "meta" nodes)forrinrecords:print(r)# Output:# {'Name': 'Virtual Shore', 'Timestamp': '2020-02-02T05:12:22', 'Title': 'Sunny Night', 'alive': 'no', 'name': 'Mysterious Mark', 'Year': '2017', 'Price': '112.34'}# {'Name': 'Virtual Shore', 'Timestamp': '2020-02-02T05:12:22', 'Title': 'Babel-17', 'alive': 'yes', 'name': 'Samuel R. Delany', 'Year': '1963', 'Price': '10'}# Validate record keysxmlrecords.validate(records,expected_keys=['Name','Timestamp','Title','alive','name','Year','Price'],)With PandasYou can easily transform records to a pandas DataFrame:importpandasaspddf=pd.DataFrame(records)With SQLYou can use records directly with INSERT statements if your SQL database isPEP 249 compliant. Most SQL databases are.SQLite is an exception. There, you'll have to transform records (= a list of dictionaries) into a list of lists:importsqlite3withsqlite3.connect('maindev.db')asconn:c=conn.cursor()c.execute("""\CREATE TABLE BOOKS (LIBRARY_NAME TEXT,SHELF_TIMESTAMP TEXT,TITLE TEXT,AUTHOR_ALIVE TEXT,AUTHOR_NAME TEXT,YEAR INT,PRICE FLOAT,PRIMARY KEY (TITLE, AUTHOR_NAME))""")c.executemany("""INSERT INTO BOOKS VALUES (?,?,?,?,?,?,?)""",[list(x.values())forxinrecords],)conn.commit()FAQWhy notxmltodict?xmltodictcan convert arbitrary XML to a python dict. However, it is 2-3 times slower thanxmlrecordsand does not support some features specific for tablular data.Why notxmlorlxml?xmlrecordsuseslxmlunder the hood. Usingxmlorlxmldirectly is a viable option too - in case this package doesn't cover your particular use case.
Package: xmlrpccomp
xmlrpc compxmlrpc python2 and python3Usageserverfrom xmlrpccomp import RpcServer
>>> def hello():
...     return 'hello'
... 
>>> server = RpcServer(('localhost', 5000))
>>> server.register_function(hello, 'hello')
>>> server.serve_forever()client>>> from xmlrpccomp import RpcClient
>>> client = RpcClient('http://localhost:5000')
>>> client.hello()
'hello'
Package: xmlrpclibex
A Python xmlrpc client library with proxy and timeout support.Installation$pipinstallxmlrpclibexOr$pythonsetup.pyinstallUsageA basic examplefromxmlrpclibeximportxmlrpclibexsp=xmlrpclibex.ServerProxy(uri,timeout=30,proxy={'host':'your proxy address','port':'your proxy port','is_socks':True,'socks_type':'v5'})The timeout and proxy parametersThis module subclasses the ServerProxy class from the xmlrpclib module (or
the xmlrpc.client module in case of Python3), and adds two parameters
timeout and proxy.timeout: seconds waiting for the socket operations.proxy: a dict specifies the proxy settings (supports HTTP proxy and socks
proxy). The dict supports the following keys:host: the address of the proxy server (IP or DNS)port: the port of the proxy server. default: 8080 for http
proxy, and 1080 for socks proxyusername: username to authenticate to the server. default Nonepassword: password to authenticate to the server, only relevant when
username is set. default Noneis_socks: whether the proxy is a socks proxy, default Falsesocks_type: string, ‘v4’, ‘v5’, ‘http’ (http connect tunnel), only
relevant when is_socks is True. default ‘v5’NoteSometimes, access HTTPS over HTTP Proxy (through CONNECT tunnel) may report
errors, recommend using SOCKS proxy.LicenseCopyright 2015 benhengxLicensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Package: xmlrpcssl
xmlrpcsslxmlprcsslis a Python library that provides secure communication (TLS) beetween clients and servers through xmlrpc protocol. It supports plugable handlers to provide user authentication. For now, it has as an example a ldap based authentication handler.Server configuration>>>fromxmlrpcsslimportSecureAuthenticatedXMLRPCServer>>>fromxmlrpcssl.handlersimportLdapVerifyingRequestHandler>>>fromdatetimeimportdatetime>>>keySsl='/tmp/server.key'>>>crtSsl='/tmp/server.crt'>>>tcpPort=433>>>serverIp='10.0.0.1'>>>ldapHost='ldapHost'# User must have access granted to this host in ldap>>>ldapServer='ldapServer'# ip or name of ldap server>>>gidNumber=111# User must be in this group in order to be authenticated>>>isMasterUser=False# True if the user has write permissions in the ldap server>>>baseUsrLoginDn='o=Organization,c=US'# user base DN to perform login in# the ldap server>>>baseSearchDn='o=Organization,c=US'# search base DN to perform a search in# the ldap server base>>>RequestHandler=LdapVerifyingRequestHandler# a handler that inherits from# BaseRequestHandler and performs user authentication>>>optArgs={'isMasterUser':isMasterUser,'baseUsrLoginDn':baseUsrLoginDn,...'ldapServer':ldapServer,'gidNumber':gidNumber,'baseSearchDn':baseSearchDn,...'host':ldapHost,'RequestHandler':RequestHandler}>>>serverSSL=SecureAuthenticatedXMLRPCServer((serverIp,tcpPort),keySsl,crtSsl,**optArgs)>>>deftest():...# toy test function...returndatetime.now().strftime("%H:%M:%S")>>>serverSSL.register_function(test)>>>serverSSL.serve_forever()Client configuration>>>fromxmlrpclibimportServerProxy>>>userName='ldapUser'>>>password='ldapUserPassword'>>>tcpPort=433>>>serverIp='10.0.0.1'>>>clientXml=ServerProxy('https://'+userName+':'+password+'@'+serverIp+':'+str(tcpPort))>>>response=clientXml.test()>>>printresponseInstallationTo install xmlrpcssl, simply run:$ pip install xmlrpcsslxmlrpcssl is compatible with Python 2.6+Documentationhttps://xmlrpcssl.readthedocs.ioSource CodeFeel free to fork, evaluate and contribute to this project.Source:https://github.com/jonDel/xmlrpcsslLicenseGPLv3 licensed.Creditshttp://code.activestate.com/recipes/496786-simple-xml-rpc-server-over-httpsandhttps://github.com/nosmo/python-xmlrpcsslfor inspiration
Package: xml-safe-mod
xml-safe-modA small utility for safely making updates to XML configuration files.It aims to give a safer alternative to using sed when updating XML configuration files, both by avoiding leaking secrets and by making the updates themselves safe and atomic.Usage# In-place updateecho'{"secret1": "password1"}'|xml-safe-mod--src/etc/daemon/config.xml--in-place--setsecret1./xpath/expression# Use a template file to generate another fileecho'{"secret1": "password1"}'|xml-safe-mod--src/etc/daemon/config.xml.in--dest/etc/daemon/config.xml--ownerdaemon--groupdaemon--perms600--setsecret1./xpath/expressionIt would support theElementTree subset of XPath.
Package: xmlsec
Python bindings for theXML Security Library.DocumentationA documentation forxmlseccan be found atxmlsec.readthedocs.io.UsageCheck theexamplessection in the documentation to see various examples of signing and verifying using the library.Requirementslibxml2 >= 2.9.1libxmlsec1 >= 1.2.18Installxmlsecis available on PyPI:pipinstallxmlsecDepending on your OS, you may need to install the required native
libraries first:Linux (Debian)apt-getinstallpkg-configlibxml2-devlibxmlsec1-devlibxmlsec1-opensslNote: There is no required version of LibXML2 for Ubuntu Precise,
so you need to download and install it manually.wgethttp://xmlsoft.org/sources/libxml2-2.9.1.tar.gztar-xvflibxml2-2.9.1.tar.gzcdlibxml2-2.9.1./configure&&make&&makeinstallLinux (CentOS)yuminstalllibxml2-develxmlsec1-develxmlsec1-openssl-devellibtool-ltdl-develLinux (Fedora)dnfinstalllibxml2-develxmlsec1-develxmlsec1-openssl-devellibtool-ltdl-develMacbrewinstalllibxml2libxmlsec1pkg-configAlpineapkaddbuild-baselibressllibffi-devlibressl-devlibxslt-devlibxml2-devxmlsec-devxmlsecTroubleshootingMacIf you get any fatal errors about missing.hfiles, update yourC_INCLUDE_PATHenvironment variable to include the appropriate
files from thelibxml2andlibxmlsec1libraries.WindowsStarting with 1.3.7, prebuilt wheels are available for Windows,
so runningpip install xmlsecshould suffice. If you want
to build from source:Configure build environment, seewiki.python.orgfor more details.Install from source dist:pipinstallxmlsec--no-binary=xmlsecBuilding from sourceClone thexmlsecsource code repository to your local computer.gitclonehttps://github.com/mehcode/python-xmlsec.gitChange into thepython-xmlsecroot directory.cd/path/to/xmlsecInstall the project and all its dependencies usingpip.pipinstall.ContributingSetting up your environmentFollow steps 1 and 2 of themanual installation instructions.Initialize a virtual environment to develop in.
This is done so as to ensure every contributor is working with
close-to-identicial versions of packages.mkvirtualenvxmlsecThemkvirtualenvcommand is available fromvirtualenvwrapperpackage which can be installed by followinglink.Activate the created virtual environment:workonxmlsecInstallxmlsecin development mode with testing enabled.
This will download all dependencies required for running the unit tests.pipinstall-rrequirements-test.txtpipinstall-e"."Running the test suiteSet up your environment.Run the unit tests.pytesttestsTests configurationEnv variablePYXMLSEC_TEST_ITERATIONSspecifies number of
test iterations to detect memory leaks.Reporting an issuePlease attach the output of following information:version ofxmlsecversion oflibxmlsec1version oflibxml2output from the commandpkg-config--cflagsxmlsec1LicenseUnless otherwise noted, all files contained within this project are licensed under the MIT opensource license.
See the includedLICENSEfile or visitopensource.orgfor more information.
Package: xml-sitemap-writer
py-xml-sitemap-writerPython3 package for writing largeXML sitemapswith no external dependencies.pip install xml-sitemap-writerUsageThis package is meant togenerate sitemaps with hundred of thousands of URLsinmemory-efficient wayby
making use ofiterators to populate sitemapwith URLs.fromtypingimportIteratorfromxml_sitemap_writerimportXMLSitemapdefget_products_for_sitemap()->Iterator[str]:"""Replace the logic below with a query from your database."""foridxinrange(1,1000001):yieldf"/product/{idx}.html"# URLs should be relative to what you provide as "root_url" belowwithXMLSitemap(path='/your/web/root',root_url='https://your.site.io')assitemap:sitemap.add_section('products')sitemap.add_urls(get_products_for_sitemap())sitemap.xmlandsitemap-00N.xml.gzfiles will be generated once this code runs:<?xml version="1.0" encoding="UTF-8"?><sitemapindexxmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><!-- Powered by https://github.com/pigs-will-fly/py-xml-sitemap-writer --><!-- 100000 urls --><sitemap><loc>https://your.site.io/sitemap-products-001.xml.gz</loc></sitemap><sitemap><loc>https://your.site.io/sitemap-products-002.xml.gz</loc></sitemap>...</sitemapindex>And gzipped sub-sitemaps with up to 15.000 URLs each:<?xml version="1.0" encoding="UTF-8"?><urlsetxmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://your.site.io/product/1.html</loc></url><url><loc>https://your.site.io/product/2.html</loc></url><url><loc>https://your.site.io/product/3.html</loc></url>...</urlset><!-- 15000 urls in the sitemap -->For easier discovery of your sitemap add its URL to/robots.txtfile:Sitemap: https://your.site.io/sitemap.xml