saxon 相关问题

Saxon是XSLT,XQuery,XPath和XSD的实现。支持最新的W3C标准,包括XSLT 3.0,XQuery 3.1,XPath 3.1和XSD 1.1。开源和商业版都有Java,.NET和C版本。产品集的最新成员是Saxon-JS,这是一个将在大多数浏览器中运行的XSLT运行时。

如何正确禁用 XSL 和 Saxon 的输出转义?

我正在使用 Saxon-He 来处理此代码(我使用这篇文章来了解这个想法): 我正在使用 Saxon-He 来处理此代码(我使用 this post 来了解这个想法): <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:key name="elelsById" match="elel" use="@elelEntity" /> <xsl:template match="/"> <xsl:text disable-output-escaping="yes">&#xA;&lt;!DOCTYPE dmodule [&#xA;</xsl:text> <xsl:text disable-output-escaping="yes">&lt;!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"&gt;&#xA;</xsl:text> <xsl:for-each select="//elel[generate-id() = generate-id(key('elelsById', @elelEntity)[1])]"> <xsl:text disable-output-escaping="yes">&lt;!ENTITY </xsl:text> <xsl:value-of select="@elelEntity" /> <xsl:text> SYSTEM "</xsl:text> <xsl:value-of select="@elelEntity" /> <xsl:text disable-output-escaping="yes">.cgm" NDATA cgm &gt;&#xA;</xsl:text> </xsl:for-each> <xsl:text disable-output-escaping="yes">]&gt;&#xA;</xsl:text> <xsl:apply-templates/> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 我的输出如下所示: <?xml version="1.0" encoding="UTF-8"?> &lt;!DOCTYPE dmodule [ &lt;!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"&gt; &lt;!ENTITY ELEL-A-01 SYSTEM "ELEL-A-01.cgm" NDATA cgm &gt; &lt;!ENTITY ELEL-A-05 SYSTEM "ELEL-A-05.cgm" NDATA cgm &gt; ]&gt; <!-- xml content --> 我期待&lt;和&gt;会被替换为<和> 我删除了disable-output-escaping="yes",结果是一样的。 我看到 Saxon 包含此扩展saxon:doctype,但它仅适用于 Saxon-PE 或 Saxon-EE。 我在实施中缺少什么? 如果您让 Saxon 序列化结果,以便它可以考虑 DOE,那么您的代码应该可以工作;如果这不起作用,通常意味着您正在使用 DOM 或 XDM 树等转换目标,而不是文件或流。 您可以看到 您的代码的一部分与 Saxon HE 一起在线使用。结果有例如 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dmodule [ <!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"> ]> <dmodule>...</dmodule>

回答 1 投票 0

XSLT 3.0 与 saxon 链接突发流 - 内存消耗注意事项

我正在根据内存消耗优化现有的 XML 到 XML 转换过程。我们正在将大型的多 GB XML 文件转换为更小的内部 XML 结构 -

回答 1 投票 0

如何定义 zip 文件中的源文件?

我的尝试基于这个答案,但我没有运气。我在 Windows 上通过 AutoHotkey 运行它,但也无法从命令行运行它。 默认文件夹设置为...

回答 3 投票 0

使用 Saxon Parser,如何定义 zip 文件中的源文件?

我尝试根据此线程中的答案来解决我的问题,但我没有运气。 https://stackoverflow.com/a/18558641/7115040?stw=2 这是我见过的最相关的回复...

回答 1 投票 0

XSLT 3.0 突发流 - 如何存储/获取另一个分支的值

我们使用 Saxon EE 12.x 将大型(多 GB)XML 文件转换为更小的内部 XML 结构。 我们希望减少每个 -

回答 1 投票 0

如何在 Java 扩展函数中从 net.sf.saxon.expr.XPathContext 获取声明的命名空间

类似于这个问题:如何获取声明的变量 我正在为 Java 扩展函数编写代码,需要从命名空间声明中查找给定前缀的命名空间 URI...

回答 1 投票 0

由于枚举而调用 Files.copy() 失败

我正在尝试在 Saxon XSLT 中调用 Java 方法。 我可以成功调用 File.renameTo() 等方法,但 Files.copy() 由于枚举而失败。 这是 XSLT: 我正在尝试在 Saxon XSLT 中调用 Java 方法。 我可以成功调用 File.renameTo() 等方法,但 Files.copy() 由于枚举而失败。 这是 XSLT: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:files="java:java.nio.file.Files" xmlns:path="java:java.nio.file.Path" xmlns:copyopt="java:java.nio.file.StandardCopyOption" exclude-result-prefixes="files path copyopt" version="3.0" expand-text="yes"> <xsl:template match="/"> <xsl:if test="files:copy(path:of(xs:anyURI('file:///from.txt')),path:of(xs:anyURI('file:///to.txt')),copyopt:REPLACE_EXISTING)"/> </xsl:template> </xsl:stylesheet> 错误是: 有多个方法与函数调用 Q{java:java.nio.file.Files}copy#3 匹配,并且没有足够的类型信息来确定应该使用哪一个 关于如何正确键入枚举 REPLACE_EXISTING 有什么建议吗? 可能是 varargs 参数让 Saxon 无法使用或者需要特殊编码,我已经使用单个/普通参数选项创建了一个辅助类,例如 package org.example; import java.io.IOException; import java.nio.file.CopyOption; import java.nio.file.Path; import java.nio.file.Files; public class FilesHelper { public static void copy(Path src, Path dest, CopyOption copyOption1) throws IOException { Files.copy(src, dest, copyOption1); } } 那么如果我声明例如xmlns:filesHelper="java:org.example.FilesHelper" 并使用 filesHelper:copy(path:of(xs:anyURI('file:///from.txt')),path:of(xs:anyURI('file:///to.txt')),copyopt:REPLACE_EXISTING()) Saxon EE(使用 12.5 进行测试)使用 helper 方法毫无问题地运行该代码(当然,在类路径上使用已编译的 helper 类)。

回答 1 投票 0

如何修复错误“net.sf.saxon.trans.XPathException:主要输出文件的系统标识符未知”

我最近将saxon版本从8.7升级到10.6。 当我使用 saxon 版本 8.7 时,xsl:result-document 工作得很好。 这就是我面临的情况: 这是我的 XML 格式: 我最近将 saxon 版本从 8.7 升级到 10.6。 当我使用 saxon 版本 8.7 时,xsl:result-document 工作得很好。 这就是我面临的情况: 这是我的 XML 格式: <?xml version="1.0" encoding="UTF-8"?> <Statements> <title>This is an example document</title> <Statement> <Invoice>1234567</Invoice> <Name>ABC</Name> </Statement> <Statement> <Invoice>9876543</Invoice> <Name>XYZ</Name> </Statement> </Statements> 这是我的 XSLT 的一部分: <xsl:template name="EnhanceAccount"> <xsl:result-document href="/data/ebpp/{$FileName}_EnhancedAccountInfo.jr1" method="text"> <xsl:text>InvoiceNumber</xsl:text> <xsl:text>&#10;</xsl:text> <xsl:for-each select="//Statement"> <xsl:value-of select="InvoiceNumber"/> <xsl:text>&#10;</xsl:text> </xsl:for-each> </xsl:result-document> </xsl:template> 我收到以下错误: net.sf.saxon.trans.XPathException:主体输出文件的系统标识符未知 在net.sf.saxon.lib.StandardOutputResolver.resolve(StandardOutputResolver.java:89) 在net.sf.saxon.lib.OutputURIResolverWrapper.resolve(OutputURIResolverWrapper.java:58) 在net.sf.saxon.expr.instruct.ResultDocument.makeReceiver(ResultDocument.java:528) 在net.sf.saxon.expr.instruct.ResultDocument.processLeft(ResultDocument.java:477) 文件已创建并包含内容: Invoicenumber 1234567 此后,就失败了。这里有什么问题呢?请帮忙! 如果从命令行运行,请确保使用 -o 选项。 如果从 Java API 运行,请确保转换结果的 Result 或 Destination 对象具有非空 SystemId 属性。 href的xsl:result-document属性被解释为相对于转换的“基本输出URI”,因此它需要该属性来决定将输出写入何处。

回答 1 投票 0

使用node.js中的XSLT样式表将xml转换为html

有没有人尝试过在node.js中使用XSLT样式表将xml文件转换为html网页?我的背景是Java。我通常使用 SAXON 将 XML 转换为 HTML 网页。我是 Node.js 的新手。 ...

回答 2 投票 0

Schematron 文件中的自定义命名空间“localFunction”导致转换崩溃

我有一个 Schematron 文件 (.sch),其中包含像“localFunctions”这样的命名空间。它用于调用同一文件中的本地函数。但是当我尝试进行验证时,编译 Sche...

回答 1 投票 0

无法访问 XSLT 处理器 3.0 中已解析的未转义 XML 的子元素

使用 Saxon-HE 10.9 和 XSLT 3.0,我尝试转换嵌入在较大 XML 文件中的未转义 XML 字符串。我已经通过使用完成了这个 使用 Saxon-HE 10.9 和 XSLT 3.0,我尝试转换嵌入在较大 XML 文件中的未转义 XML 字符串。我通过使用完成了这个 <xsl:template match="INTERNAL_MATCH" mode="dataset"> <xsl:variable name="unescapedXML" select="parse-xml(.)"/> <TESTVAL> <xsl:element name="output-params2"> <xsl:copy-of select="//$unescapedXML" /> </xsl:element> </TESTVAL> </xsl:template> 输出如下: <TESTVAL> <output-params2> <product ism:ownerProducer="USA"> <name>Test Product</name> <shortName>TP</shortName> <base type="testtype" id="1235"/> <base type="testtype2" id="1236"/> </product> </output-params2> </TESTVAL> 但是,我想访问此输出的子节点,而不是能够按类型解析基本元素,if type = 'testtype',然后将其 id 存储为变量。 我该如何实现这个目标?我尝试做访问器 <xsl:copy-of select="//$unescapedXML/product/base" /> 但它什么也没返回。 按类型解析基本元素,如果 type = 'testtype' 则存储它的 id 给出以下输入: XML <INTERNAL_MATCH>&lt;product ownerProducer="USA"&gt;&lt;name&gt;Test Product&lt;/name&gt;&lt;shortName&gt;TP&lt;/shortName&gt;&lt;base type="testtype" id="1235"/&gt;&lt;base type="testtype2" id="1236"/&gt;&lt;/product&gt;</INTERNAL_MATCH> 这个样式表: XSLT 3.0 <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="INTERNAL_MATCH"> <xsl:variable name="unescapedXML" select="parse-xml(.)"/> <TESTVAL> <output-params2> <xsl:value-of select="$unescapedXML/product/base[@type='testtype']/@id" /> </output-params2> </TESTVAL> </xsl:template> </xsl:stylesheet> 将返回: 结果 <?xml version="1.0" encoding="UTF-8"?> <TESTVAL> <output-params2>1235</output-params2> </TESTVAL> 重要: 我已从您的输入示例中删除了未声明的命名空间前缀 ism:。我假设在您的实际情况下,此前缀已正确声明并绑定到名称空间,否则您会收到错误而不是报告的结果。

回答 1 投票 0

svrl:失败断言位置属性规范化元素名称

刚刚使用 schxslt 使用 SaxonCS 编译的 xsl 文件对我的 xml 文件进行了验证。在 svrl 报告的输出中,失败的位置如下所示。 刚刚使用 schxslt 使用 SaxonCS 编译的 xsl 文件对我的 xml 文件进行了验证。在 svrl 报告的输出中,失败的位置如下所示。 <svrl:failed-assert location="/Q{http://www.edefter.gov.tr}defter[1]/Q{http://www.xbrl.org/2003/instance}xbrl[1]/Q{http://www.xbrl.org/int/gl/cor/2006-10-25}accountingEntries[1]/Q{http://www.xbrl.org/int/gl/cor/2006-10-25}entryHeader[298]" test="some-test"> <svrl:text>some-message</svrl:text> </svrl:failed-assert> 有没有可能的方法来检索带有命名空间的 xml 元素 <svrl:failed-assert location="/edefter:defter[1]/xbrli:xbrl[1]/gl-cor:accountingEntries[1]/gl-cor:entryHeader[298]" test="some-test"> <svrl:text>some-message</svrl:text> </svrl:failed-assert> 像这样。 我试图找到一种提供名称空间或导入模式的方法,但找不到方法。 编辑: 这是编译前svrl文件的命名空间 <xsl:transform version="2.0" xmlns="http://www.w3.org/1999/XSL/TransformAlias" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:error="https://doi.org/10.5281/zenodo.1495494#error" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" xmlns:schxslt-api="https://doi.org/10.5281/zenodo.1495494#api" xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 这是编译后的 svrl 报告的命名空间 <svrl:schematron-output xmlns:defterek="http://www.edefter.gov.tr/ek" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:edefter="http://www.edefter.gov.tr" xmlns:error="https://doi.org/10.5281/zenodo.1495494#error" xmlns:gl-bus="http://www.xbrl.org/int/gl/bus/2006-10-25" xmlns:gl-cor="http://www.xbrl.org/int/gl/cor/2006-10-25" xmlns:gl-muc="http://www.xbrl.org/int/gl/muc/2006-10-25" xmlns:gl-plt="http://www.xbrl.org/int/gl/plt/2010-04-16" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" xmlns:schxslt-api="https://doi.org/10.5281/zenodo.1495494#api" xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" title="Yevmiye defteri dokumanlarını kontrol etmek için gerekli olan schematron kuralları"> <svrl:ns-prefix-in-attribute-values prefix="gl-plt" uri="http://www.xbrl.org/int/gl/plt/2010-04-16"/> <svrl:ns-prefix-in-attribute-values prefix="gl-cor" uri="http://www.xbrl.org/int/gl/cor/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="gl-bus" uri="http://www.xbrl.org/int/gl/bus/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="gl-muc" uri="http://www.xbrl.org/int/gl/muc/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="xbrli" uri="http://www.xbrl.org/2003/instance"/> <svrl:ns-prefix-in-attribute-values prefix="ds" uri="http://www.w3.org/2000/09/xmldsig#"/> <svrl:ns-prefix-in-attribute-values prefix="xades" uri="http://uri.etsi.org/01903/v1.3.2#"/> <svrl:ns-prefix-in-attribute-values prefix="edefter" uri="http://www.edefter.gov.tr"/> <svrl:ns-prefix-in-attribute-values prefix="defterek" uri="http://www.edefter.gov.tr/ek"/> 在您的 Schematron 中,您可以提供自己的 schxslt:location 函数,例如 <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" queryBinding="xslt3"> <xsl:function name="schxslt:location" as="xs:string"> <xsl:param name="node" as="node()"/> <xsl:sequence select="string-join($node/ancestor-or-self::*!node-name(), '/')"/> </xsl:function> 该示例只是向您展示如何设置自己的函数,函数体不是您想要生成的带有位置谓词的路径的实现,而只是生成带有节点名称的路径。但是您可以根据您的需求调整该函数,但尝试模仿 path 函数结果的原始 Schxslt 实现位于 https://github.com/schxslt/schxslt/blob/main/core/src/main/资源/xslt/2.0/compile/compile-2.0.xsl#L185。在该代码中,您似乎只想输出元素节点的 Q{ 加上位置谓词,而不是 node-name() 命名空间-uri 和本地名称串联。

回答 1 投票 0

Schematron 中使用 schxslt 和 saxonCS 编译的 base-uri 函数

我有一个 xml 文件和 .sch 文件来验证此 xml 文件。但有一些规则叫。 base-uri() 函数返回 nu...

回答 1 投票 0

希望使用来自 Saxon 的 Java 或 .NET 调用从 XSLT 执行 HTTP POST

我使用一种专有工具,通过 Saxon 10 引擎利用 XSLT。 我正在寻找一种将有效负载从 XSL 发送到 API 端点的方法。对于 GET 来说,有效负载太大(这......

回答 1 投票 0

我不明白如何使用 Saxon xslt 转换扩展具有默认值的属性

我正在使用 Saxon-J EE 12.5,我不明白如何使用默认值扩展属性,以及如何使用模式感知转换(我知道如果我.. .

回答 1 投票 0

我想将元素下的CDATA转换为属性值并保留新行

我想使用XSLT将一个XML文件转换为另一个XML文件,并用属性替换某些XML元素的CDATA。 我还需要保留换行符,当然需要转换...

回答 1 投票 0

Saxon 和 XMLFilter:omit-xml-declaration=“yes” 没有效果

我们使用Saxon来生成一些导出文件。 这些转换通常由相继应用的多个 XSLT 转换组成。 为了提高性能,我引入了代码

回答 1 投票 0

如何将 XsltTransformer 的转换结果写入字符串,然后将其推送到 azure 服务总线?

我需要使用 XsltTransformer 将给定的 xml 转换为 json,XsltTransformer 编译 xslt,然后转换 xml。我希望 XsltTransformer 的目的地是 stri...

回答 1 投票 0

XSLT 错误 FODC0002,尽管路径似乎正确

我正在使用 XSLT 2 (Saxon HE 10.9)。 我有以下目录树: 项目 - 索引.xml - 课程 - 我的A班 -MyClassA.xml 我正在将 MyClassA.xml 转换为新的文件格式。 这里有一个

回答 1 投票 0

使用saxon作为引擎转换XML时出现的问题

我有一个 xslt 将从这里获得的 RFC 列表转换为内部格式(也是 xml 格式)。 xslt 代码非常明显,它包含与......的前两个级别匹配的模板。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.