Tag: saxon

无法从Saxon XSLT处理器访问更新的Java对象

我正在使用Saxon XSLT处理器的开源版本“来自Saxonica的Saxon 9.0.0.2J”,并且我第一次尝试使用java可扩展性。 我遇到了一个问题,我怀疑这可能是对开源版本的限制,但是想先检查一下我是否会遗漏这些东西。 从下面的代码片段中,我的结果是$ c1的最终值不会因为调用greg而变化:setTime() – 即Saxon中的$ c1变量似乎是从底层Java对象取消的,并且没有明显的方法来访问setTime()调用更新的对象。 请注意,代码段中的所有代码都经过测试并正常工作 – 即$ c1通过getInstance()调用正确实例化,$ startdate具有正确的格式,并且$ d1已正确实例化。 思考? ….

如何在命令行中使用带有Saxon-HE的XPath解析HTML?

我使用saxon HE 9.6,它非常适合在解析格式良好的XML文件时使用XPath 3。 但我想知道如何将expath-http-client (或任何其他工作解决方案)与Saxon结合起来, 以便能够解析realLife©®™(可能已损坏)的HTML。 (Java不是我更好的技能)。 我搜索谷歌很多小时没有任何工作解决方案。 我试过类似的东西: xquery_file.xsl: xquery version “1.0”; declare namespace http=”http://expath.org/ns/http-client”; let $url := ‘http://stackoverflow.com’ let $response := http:send-request( ) return {$response} Shell命令取自expath-http-client-saxon-0.10.0的README saxon –repo /usr/share/java/expath/repo -xsl:sample/simple-get.xsl -it:main 要么 saxon –repo /usr/share/java/expath/repo -xsl:xquery_file.xsl -it:main 没有成功。 我得到: Transformation failed: Unknown configuration property http://saxon.sf.net/feature/repo 理想情况下,我最后要做的是直接从命令行查询一个URL,而不是XQuery文件,而是一个XPath表达式(如果可能的话)。 我很确定那里的一些XML / Java / XPath专家有我正在寻找的解决方案。 /usr/share/java/expath/repo包含: […]

XALAN寄存器扩展function,如SAXON

我想用XALAN通过XSLT转换XML。 现在我想使用扩展函数,这个函数必须像在SAXON中一样添加到JAVA源代码中: 方法: TransformerFactory tFactory = TransformerFactory.newInstance(); Configuration c = ((net.sf.saxon.TransformerFactoryImpl) tFactory).getConfiguration(); c.registerExtensionFunction(new FooExtension()); FooExtension: public class FooExtension extends ExtensionFunctionDefinition { private static final long serialVersionUID = -8143237239412146617L; @Override public SequenceType[] getArgumentTypes() { return new SequenceType[] { SequenceType.EMPTY_SEQUENCE }; } @Override public StructuredQName getFunctionQName() { return new StructuredQName(“ns”, “http://namespace”, “generate-guid”); } } 但是它如何在XALAN中工作(?FunctionTable?,?FunctionResolver?,?URIResolver?),我必须通过源代码完成,我不允许在XSLT中添加类。 谢谢!!

如何使用Saxon java库命令行工具执行schematronvalidation?

非常基本的问题 – 我有一个xml文件,我想根据一个schematron文件validation它。 如何使用Saxon命令行执行此操作? 根据命令行参考,我没有看到任何指定schematron文件的选项。

validation失败后移动文件(Java)

我们正在validationXML文件,根据validation结果,我们必须将文件移动到不同的文件夹中。 当XML有效时,validation器返回一个值,我们可以毫无问题地移动文件。 当XML根据模式无效时,也会发生同样的事情。 但是,如果XML格式不正确,validation器会抛出exception,当我们尝试移动文件时,它会失败。 我们相信在某个地方仍然有一个句柄可以保存文件。 我们尝试在移动文件之前放置System.gc()并对问题进行排序,但我们不能将System.gc()作为解决方案。 代码看起来像这样。 我们有一个File对象,我们从中创建一个StreamSource。 然后将StreamSource传递给validation器。 当XML格式不正确时,它会抛出SAXException。 在exception处理中,我们使用.renameTo()方法来移动文件。 sc = new StreamSource(xmlFile); validator.validate(sc); 我们尝试过捕获 validator.reset(); validator=null; sc=null; 但仍然.renameTo()无法移动文件。 如果我们将System.gc()放入catch中,那么移动将成功。 有人可以告诉我如何在没有System.gc()?情况下对其进行排序System.gc()? 我们使用JAXP和saxon-9.1.0.8作为解析器。 非常感谢

在XSLT中调用Java实例方法

我正在使用Saxon(我可以在必要时使用Xalan)XSLT处理器进行一些转换。 我想将下面对象的实例作为参数传递给XSLT模板。 public class Test { private String value; public Test(String v) { value = v; } //getters, setters etc. } 所以我创建了这个对象,即。 Test test = new Test(“test”); transformer.setParameter(“test”, test); 在XSLT文件中,我将param声明为: 现在我的问题是如何在XSLT中对此对象调用任何实例方法(即getValue())? 它甚至可能吗? 我知道我可以调用不同Java类的静态方法,但这并不是我想要的。 此外,是否可以在XSLT中填充Java对象,即。 调用setter方法作为对象的实例,然后在转换完成后将此对象与Java代码中的新值一起使用?

查找XML文档中的所有名称空间声明 – xPath 1.0 vs xPath 2.0

作为Java 6应用程序的一部分,我想在XML文档中查找所有名称空间声明,包括任何重复项。 编辑 :Per Martin的请求,这是我正在使用的Java代码: XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); XPathExpression xPathExpression = xPathExpression = xPath.compile(“//namespace::*”); NodeList nodeList = (NodeList) xPathExpression.evaluate(xmlDomDocument, XPathConstants.NODESET); 假设我有这个XML文档: a e txt:f 要查找所有名称空间声明,我使用xPath 1.0将此xPath语句应用于XML文档: //namespace::* 它找到4个命名空间声明,这是我期望(和期望): /root[1]/@xmlns:att – attribute.com /root[1]/@xmlns:ele – element.com /root[1]/@xmlns:txt – textnode.com /root[1]/@xmlns:xml – http://www.w3.org/XML/1998/namespace 但是,如果我改为使用xPath 2.0 ,那么我将获得16个名称空间声明(前面的每个声明4次),这不是我期望的(或期望的): /root[1]/@xmlns:xml – http://www.w3.org/XML/1998/namespace /root[1]/@xmlns:att – attribute.com /root[1]/@xmlns:ele […]

Saxon XSLT转换:如何在转换期间失败时关闭输出流

我想用多个输出文件进行XSLT转换。 因为我使用了“xsl:result-document”。 转换失败时,应删除所有输出文件。 但是如果由“xsl:result-document”创建的文档生成失败,我的程序将无法再删除此文档。 我认为原因是,“xsl:result-document”创建了一个不同的OutputStream。 有谁知道如何关闭所有输出流? 编辑:我使用Saxon 9.5进行转换。 请参阅下面的源代码: public void simpleTransform(String sourcePath, String xsltPath, String outputPath) { String resultDir=outputPath+”/filename.html”; TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource ss = new StreamSource(new File(xsltPath)); StreamResult sr = new StreamResult(new File(resultDir)); Transformer transformer = tFactory.newTransformer(ss); try { transformer.transform(new StreamSource(new File(sourcePath)), sr); System.out.println(“Transformation finished!”); } catch (TransformerException te) { try { […]

使用XSLT输出多个文件

我试图找到一个我发现使用XSLT 2.0输出多个文件工作的例子。 使用Saxon B 9.7.0.1和Java 1.6,我收到此错误: C:\ Documents and Settings \ Administrator \ Desktop \ saxon> java -jar saxon9.jar -s:input.xml -xsl:transform.xml transform.xml第15行出错:java.net.URISyntaxException:路径中的非法字符在索引20:file:/// C:/ Documents and Settings / Administrator / Desktop / saxon / output1 / test1.html at xsl:for-each(file:/ C:/ Documents%20and%20Settings / Administrator / Desktop / saxon / transform.xml#10)processing / tests / testrun [1]转换失败:报告了运行时错误 input.xml中 transform.xml

在Saxon 9中他使用Java XML解析器,无法识别正则表达式中的单词边界(\ b)

我有以下简单的正则表达式: \b\w+\b Saxon报告以下错误: syntax error at char 2 in regular expression: Escape character ‘b’ not allowed 这是否意味着我不能在Java Saxon解析器中使用单词边界? 是否有另一种具有此function的免费XML Java解析器?