- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
正在寻找the Saxon documentation命令行上有一个“-x:className”标志,用于指定在应用 XSLT 期间使用的特定 SAX 解析器。
如何以编程方式实现这一目标?我现在在我的代码中使用 s9api,我检查了 Processor
、XsltCompiler
、XsltExecutable
和 XsltTransformer
对象;他们都没有办法设置 SAX 解析器。我还实例化了一个 net.sf.saxon.Transform
,但它也没有任何内容。
我很可能看到了错误的对象集,但我不知道我应该如何知道正确的对象集是什么。
链接到上面提到的“使用指定的 SAX 解析器为源文件和加载的任何文件使用 document() 函数”的命令行文档。我敢肯定,如果我知道自己在做什么,这个“document()
”函数的提及会立即让我明白。不幸的是,我不知道,它也不知道。
编辑:Michael Kay 在下面的回答是正确的。 (当然是!他是撒克逊人!)我想我应该为后代添加一些示例代码。
首先,他使用 net.sf.saxon.s9api.Processor
的解决方案:
Processor processor = new Processor(false);
processor.setConfigurationProperty(FeatureKeys.SOURCE_PARSER_CLASS,
"fully.qualified.package.name.of.MySAXParser");
在上面,重要的是向它提供 SAXParser 的完全限定名称(而不仅仅是类名)作为字符串。如果您执行以下操作:
processor.setConfigurationProperty(FeatureKeys.SOURCE_PARSER_CLASS,
new MySAXParser());
...你会得到这个:
java.lang.IllegalArgumentException: SOURCE_PARSER_CLASS class must be a String
其次,他使用 net.sf.saxon.s9api.XsltTransformer
的解决方案:
// ^^^ Various setup code to get to this point...
XsltTransformer transformer = xsltExecutable.load();
File file = new File("/path/to/my/file");
InputStream fileInputStream = new FileInputStream(file);
InputSource inputSource = new InputSource(fileInputStream);
Source saxSource = new SAXSource(new MySAXParser(), inputSource);
transformer.setSource(saxSource);
// vvv Set other parameters, actually invoke the transform, etc...
我唯一的问题/警告是:
1.) 在控制台中打印出以下消息:
Cannot find CatalogManager.properties
这似乎没有任何影响,因为转换仍然工作得很好,而且我很确定它与 Saxon 本身没有任何关系,而是我在自定义实现中搞砸了SAX 解析器。
2.) 如果我想转换一个非 XML 文档(是的,这完全有可能),我不能使用解决方案 #2,因为调用 XsltTransform.setSource() 会导致它默认将源作为 XML 查看文件,并会给你可怕的
Error on line 1 column 1
SXXP0003: Error reported by XML parser: Content is not allowed in prolog.
因此,对于转换非 XML 文档,您必须使用“粗粒度”处理器解决方案。
最佳答案
如果您想确保获得 Saxon 问题的答案,请使用 dev.saxonica.com 上的 Saxon 论坛,或 SourceForge 上的 saxon-help 列表。
答案是:可以用
Processor.setConfigurationProperty(
FeatureKeys.SOURCE_PARSER_CLASS, parserClassName)
然而,这可能有点粗粒度:它在命令行上工作,因为配置通常只是为了转换一个文档而设置的。为了更好地控制,您始终可以以 SAXSource 对象的形式向转换提供输入,该对象包含一个 XMLReader,代表您要使用的 SAX 解析器的一个实例。
关于java - Java 中的撒克逊语 : Specify SAX Parser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317066/
在 CSS 中,我从来没有真正理解为什么会发生这种情况,但每当我为某物分配 margin-top:50% 时,该元素就会被推到页面底部,几乎完全消失这一页。我假设 50% 时,该元素将位于页面的中间位
我想在 MongoDB 中使用 Grails2.5 中的“ElasticSearch”插件。我的“BuildConfig.groovy”文件是: grails.servlet.version = "3
我有一个我想要处理的 OHLC 股票报价数组。 Open High Low Close Volume 2003-01-05
我尝试创建一个PreparedStatement: stmt = conn.prepareStatement("SELECT POLBRP, POLTYP, POLNOP, INCPTP, TRMTH
我的目录结构如下: root libA CMakeLists.txt ClassA.cpp libB CMakeLists.txt ClassB.cpp s
我是 DBMS 的新手。我在每个用户的不同 csv 文件中都有车辆痕迹。格式:名称,时间戳,纬度,经度,randomId。例如:user0,2008-10-2309:42:25,441972.6942
我需要为我的应用程序打上烙印,并且只需要自定义少量图像,代码库是相同的,只是生成的常量很少。 由于aapt 允许指定许多资源目录,有没有办法在Eclipse .classpath 文件中指定res 目
我希望在我的应用程序中实现 JWT,因为我正在通过引用以下内容对其进行一些研发:https://stormpath.com/blog/jwt-java-create-verify .当我尝试通过提取声
我正在尝试通过设置限制获取数据并根据时间戳对数据进行排序,但在运行应用程序时崩溃并显示此错误消息: 查询无效。在指定顺序之前不得指定起点。 我不知道为什么会这样。如何解决? 我需要数据序列和排序。
我正在使用Elasticsearch和Tire进行Rails3项目。当我尝试运行Elastic-search时,安装它后,出现以下错误: The stack size specified is too
我创建了一个简单的函数来执行 Http PUT 请求 - public string checkIfUserExists(string userName) { var endP
Java 安全管理器允许通过定义如下子句来指定某些代码段的权限: ... grant codebase http://foo.bar.com/test.jar { permission java
这更像是一种验证。 在 Oracle/Java 教程页面上,例如 this , 我一直看到catch 旁边的“specify”就好像它是另一个语句在异常处理中具有一些功能。 据我所知,“catch o
本文整理了Java中org.batfish.specifier.ZoneNameRegexInterfaceSpecifier类的一些代码示例,展示了ZoneNameRegexInterfaceSpe
我正在尝试运行以下命令: ionic cordova run android --device 但我收到以下错误 BUILD FAILED in 3s (node:3956) Unha
在不包含 viewport 元标记的网页上,大多数移动浏览器会将页面上的部分或全部字体“提升”到大于 css 指定的大小。例如,在移动版 Safari 上,7px 的指定大小将提升为类似 12px 的
嗨,我不了解 keras fit_generator 文档。 我希望我的困惑是理性的。 有一个batch_size还有分批训练的概念。使用 model_fit() ,我指定一个 batch_size
我使用 IProviderSearchContext 在 Sitecore 8.1(Lucene 搜索)中搜索特定项目,并获得每个项目的两个版本(en、ar)。我的问题是:我是否必须为每个查询指定:
Except in a declaration of a constructor, destructor, or conversion function, at least one defining-
使用 GooglePageSpeed 分析在线商店(Shopware)导致每个图像上出现许多“未指定到期时间”的线条。 我想知道是因为网络服务器 (nginx) 在所有图像的响应中添加了 Last-M
我是一名优秀的程序员,十分优秀!