当前位置: 首页 > 知识库问答 >
问题:

Saxon XQuery目录文件来覆盖DTD URI?

闻人嘉木
2023-03-14

我试图使用一个目录文件来覆盖XML文件中的DTD位置。我尝试按照这里的所有提示使用saxon内置目录功能,但一直无法让它工作。我简化为这个简单的例子:

撒克逊语的确认版本:

C:\test>java net.sf.saxon.Query
No query file name
Saxon-HE 9.7.0.7J from Saxonica
...

我的目录文件。我试图简化为最简单的(uriSuffix):

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <uriSuffix uriSuffix="bad.dtd"  uri="good.dtd" />
</catalog>

已确认的解析器位于类路径中,并且在目录中的行为符合预期:

C:\test>java org.apache.xml.resolver.apps.resolver -c didcat.xml -u bad.dtd uri
Cannot find CatalogManager.properties
Resolve URI (uri):
        uri: bad.dtd
Result: file:/C:/test/good.dtd

简单的test.xml文件:

<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "bad.dtd">
<a>hello world</a>

简单test.xql:

doc("test.xml")/a

结果:

C:\test>java net.sf.saxon.Query -t -catalog:didcat.xml test.xql
Loading catalog: didcat.xml
Saxon-HE 9.7.0.7J from Saxonica
Java version 1.8.0_101
Analyzing query from test.xql
Analysis time: 131.650519 milliseconds
Resolved URI: test.xml
        file:/C:/test/test.xml
Building tree for file:/C:/test/test.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Error on line 2 column 6 of test.xql:
  FODC0002: I/O error reported by XML parser processing file:/C:/test/test.xml:
  C:\test\bad.dtd (The system cannot find the file specified)
Query failed with dynamic error: I/O error reported by XML parser processing file:/C:/test/test.xml: C:\test\bad.dtd (The system cannot find the file specified)

我尝试了几种不同的编目技术来覆盖DTD URI,但是都不成功。我做错了什么?提前感谢。

共有1个答案

陈季
2023-03-14

要解析对XML实体(如dtd)的引用,您需要使用目录中的< code>systemSuffix条目,而不是< code>uriSuffix条目。将您的目录更改为

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <systemSuffix systemSuffix="bad.dtd" uri="good.dtd" />
</catalog>
 类似资料:
  • 我有一个Spring Boot and Gradle项目。我在gradle中定义了应用程序版本。Gradle可以从中读取的属性文件。我希望在应用程序代码中有这个数字,作为一个注入值。 我正在尝试做的是将版本号复制到application.properties或单独的version.properties文件中(两者都位于src/main/资源中)。实际上,我想将属性文件加载到Properties对象

  • 文件已经存在,您可以覆盖它 (“是”按钮),跳过 (“否”按钮),重命名,全部重命名 ,覆盖全部文件 (“全部皆是” 按钮),跳过全部已存在的文件 (“全部皆否”按钮) 或取消 当前的操作。 如果您选择了全部重命名 模式,重命名文件将得到象 'filename(N).txt' 的名字,'filename.txt' 的位置是原始的文件名, 'N' 是数字。

  • 我能告诉Quarkus Gradle插件(或)使用我自己提供的资源,而不是在重复时从依赖项jar中选择资源吗? 我在构建uber-jar时收到这些消息: 这些DKPro/uimaFIT库是NLP库,它们自带了自己的

  • 问题内容: 我编写的代码应该覆盖所选文本文件的内容,但是会附加它。我到底在做什么错? 编辑 我尝试制作一个新的temp.txt文件并将新内容写入其中,删除此文本文件并将temp.txt重命名为该文件。事实是,删除总是不成功的。我认为我不必为此更改用户权限吗? 另外,程序的一部分列出了该目录中的所有文件,因此我猜它们正在被程序使用,因此无法删除。但是为什么不覆盖呢? 解决了 我最大的“ D’oh”时

  • 我正在尝试替换用Gradle生成的WAR文件中的一个文件。

  • 我在学KINTER我有点困惑。下面的代码显示了face_recogniton()函数中的白色文本。 但文本重叠了。在显示新文本之前,如何清除它?