使用lxml重写

使用lxml重写,xml,lxml,libxml2,xmlcatalog,Xml,Lxml,Libxml2,Xmlcatalog,我正在生成一个XML模式,然后在Python3中生成数据文件 生成的模式包括一个基本模式,我使用目录将包含URI更改为本地文件。我在Python中设置了环境变量“XML\u CATALOG\u FILES”,这非常有效 但是,我尝试使用rewriteSystem来使用本地生成的模式来代替数据文件中的通用位置引用,而rewrite似乎不起作用 这是目录 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog PUBLIC

我正在生成一个XML模式,然后在Python3中生成数据文件

生成的模式包括一个基本模式,我使用目录将包含URI更改为本地文件。我在Python中设置了环境变量“XML\u CATALOG\u FILES”,这非常有效

但是,我尝试使用rewriteSystem来使用本地生成的模式来代替数据文件中的通用位置引用,而rewrite似乎不起作用

这是目录

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD XML Catalogs V1.1//EN" "http://www.oasis-open.org/committees/entity/release/1.1/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

  <!-- S3Model 3.0.0 RM Schema -->
  <uri name="https://www.s3model.com/ns/s3m/s3model_3_0_0.xsd" uri="s3model/s3model_3_0_0.xsd"/>


  <!-- S3Model DMs -->
  <rewriteSystem systemIdStartString="https://dmgen.s3model.com/dmlib/" rewritePrefix="file:///home/tim/DII/Kunteksto/output/"/>
</catalog>

你知道为什么lxml(Libxml2)能够识别这个系统吗

而不是创建解析器并在数据文件中引用模式

我使用了一种不同的方法,从lxml中的模式字符串创建一个模式对象

    schema_doc = etree.parse(schema)
    modelSchema = etree.XMLSchema(schema_doc)
变量模式保存XML模式的字符串表示形式

然后,在创建每个数据文档时,使用该模式验证该文档:

  try:
     tree = etree.parse(StringIO(xmlStr))
     modelSchema.assertValid(tree)
  except etree.DocumentInvalid:
     file_id = "Invalid_" + file_id
我必须删除XML声明:

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


若要获取etree.parse,请正确操作

你的意思是“知道为什么lxml(Libxml2)不承认这种重写吗?”,不是吗?你提到了python3,但问题中没有Python代码。我们如何复制它呢?问题并不是专门针对Python的。它是关于通过lxml的Libxml2,而不是使用目录中的重写。因此,可以通过lxml尝试使用XML目录(带有重写系统),当然是通过Python。这个答案如何解释
rewriteSystem
catalog条目的问题?它没有回答rewriteSystem问题。这是一种在lxml中使用不同方法的变通方法。
<?xml version="1.0" encoding="UTF-8"?>