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运行时。

如何使用XSLT 3.0?

的主要元素。我在文档中其他地方还有其他元素,其中包含我要添加的信息的信息

回答 1 投票 0

XSLT3-如何在XSL中使用命名空间 - 字母:essuatiate

使用萨克森EE 9.9,我正在尝试使用XSL:使用命名空间 - 字母进行评估,请参阅下面的基本尝试,我分配了我分配的虚拟元素,该元素报告了名称空间前缀“我的“我的”到

回答 1 投票 0

如何仅使用xpath 3.1?

我有一个戏剧的XML文件,该提取物将提供: lysistrata的cal.tu Mecastor salve。 sed quid

回答 1 投票 0

如何将相同的XSLT模板应用于XML元素并动态创建元素?

I正在与XSLT2.0一起工作,并尝试将相同的转换过程应用于输入XML的两个元素,并在XSLT中动态创建的元素。 输入XML: <?xml version="1.0" encoding="UTF-8"?> <document> <h2>General Introduction</h2> <h3>Project Overview</h3> <h3>Goals and Challenges</h3> <h2>Installation</h2> <h3>Initial Configuration</h3> <h4>Configuration File</h4> <h3>Deployment</h3> <h4>On a Local Server</h4> <h4>On a Remote Server</h4> <h2>Usage</h2> <h3>Basic Commands</h3> <h3>Advanced Options</h3> </document> XSLT <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/document"> <html> <body> <xsl:apply-templates/> <h3>Dynamic title (was not in the XML)</h3> </body> </html> </xsl:template> <xsl:template match="h2 | h3 | h4"> <xsl:element name="{name()}"> ¶<xsl:value-of select="."/> </xsl:element> </xsl:template> </xsl:stylesheet> issue 转换正确地适用于原始XML的<h2>, <h3>, and <h4>元素。 但是,动态创建的元素:<h3>Dynamic title (was not in the XML)</h3> 不是由匹配h2 | h3 | h4的模板处理的。 问题 如何确保XML元素和动态创建的元素都经历相同的转换过程? 是否有一种方法可以重新申请模板到XSLT中生成的元素? 将变量作为临时结果,并且可能更好的不同模式来分开处理步骤: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:mode name="step1" on-no-match="shallow-copy"/> <xsl:mode name="step2" on-no-match="shallow-copy"/> <xsl:variable name="result1"> <xsl:apply-templates mode="step1"/> </xsl:variable> <xsl:template match="/"> <xsl:apply-templates select="$result1" mode="step2"/> </xsl:template> <xsl:template mode="step1" match="/document"> <html> <body> <xsl:apply-templates mode="#current"/> <h3>Dynamic title (was not in the XML)</h3> </body> </html> </xsl:template> <xsl:template mode="step2" match="h2 | h3 | h4"> <xsl:element name="{name()}"> ¶<xsl:value-of select="."/> </xsl:element> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

从分离的模式文件删除示意图验证

我有一个示意图文件,该文件已分开为3个文件。一个文件包含使用代码列表,另一个文件包含详细信息和消息,而另一个则包含这些r ...

回答 1 投票 0


xslt3.0

我在以前的问题中询问了有关在XSLT 3.0中运行XQUERY的支持。 (是否有一种方法可以在XSLT脚本文件中本地运行Xquery函数 /或Xquery脚本?)答案是我...

回答 1 投票 0

我有这样的XML文档(为此示例简化): <DetailBill> <DetailBillInfo> <NoticeType>Detail Invoice</NoticeType> <Application>1</Application> </DetailBillInfo> <DetailBillInfo> <NoticeType>Detail Invoice</NoticeType> <Application>2</Application> </DetailBillInfo> <DetailBillInfo> <NoticeType>Detail Invoice</NoticeType> <Application>3</Application> </DetailBillInfo> </DetailBill> 使用XSLT,我想将其转换为类似的tab删除文本: NoticeType\tApplication Detail Invoice\t1 Detail Invoice\t2 Detail Invoice\t3 我正在使用的样式表:<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no" /> <xsl:template match="/DetailBill"> <xsl:text>NoticeType&#x9;Application&#xA;</xsl:text> <xsl:for-each select="DetailBillInfo"> <xsl:value-of select="normalize-space(NoticeType)" /> <xsl:text>&#x9;</xsl:text> <xsl:value-of select="normalize-space(Application)" /> <xsl:text>&#xA;</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> 我用Saxoncs 12.4在.NET 8.0中调用转换: System.Xml.Linq.XElement xml = System.Xml.Linq.XElement.Parse("{xml}"); System.Xml.Linq.XElement stylesheet = System.Xml.Linq.XElement.Parse("{xslt}"); Saxon.Api.Processor processor = new(true); Saxon.Api.XsltCompiler comp = processor.NewXsltCompiler(); List<Saxon.Api.Error> errs = []; comp.ErrorReporter = errs.Add; Saxon.Api.XsltExecutable exe = comp.Compile(stylesheet.CreateReader()); Saxon.Api.Xslt30Transformer xfrm = exe.Load30(); Saxon.Api.XdmValue output = xfrm.ApplyTemplates(xml.CreateReader()); 但是,我看起来像这样的输出: NoticeType Application Detail Invoice \t 1 Detail Invoice \t 2 Detail Invoice \t 3 有人能告诉我我在做什么错吗? update: Martin Honnen的建议,我尝试使用Saxon.Api.Serializer,这给出了预期的产出。这是一个更新的C#代码样本: System.Xml.Linq.XElement xml = System.Xml.Linq.XElement.Parse("{xml}"); System.Xml.Linq.XElement stylesheet = System.Xml.Linq.XElement.Parse("{xslt}"); Saxon.Api.Processor processor = new(true); Saxon.Api.XsltCompiler comp = processor.NewXsltCompiler(); List<Saxon.Api.Error> errs = []; comp.ErrorReporter = errs.Add; Saxon.Api.XsltExecutable exe = comp.Compile(stylesheet.CreateReader()); Saxon.Api.Xslt30Transformer xfrm = exe.Load30(); Saxon.Api.Serializer ser = processor.NewSerializer(); System.Text.StringBuilder sb = new(); using System.IO.StringWriter sw = new(sb); ser.OutputWriter = sw; xfrm.ApplyTemplates(xml.CreateReader(), ser); 运行sb的一开始包含预期输出。我对撒克逊人没有足够深的了解,无法理解为什么使用Serializer与Justoutput.ToSting()有所作为。我很高兴能使它起作用。 如果您希望撒克逊人控制序列化的文本输出,包括基于您的<xsl:output method="text" indent="no" />和XSLT代码的序列化,那么我建议不要因为ApplyTemplates的结果不使用XDMValue,而是通过aSerializer(例如。 aStringWriter或流)作为第二个论点。 然后在StringWriter上呼叫ApplyTemplates,我认为您将想要的输出作为字符串获得,或者,撒克逊人当然只写入文件(流),如果您提供流到ToString().。

回答 1 投票 0

不能够设置输出:xquery

declare namespace xf = "http://tempuri.org//test" \`declare namespace output ="http://www.w3.org/2010/xslt-xquery/serialization"; declare option output: method "text"; declare function xf:test($test as element(\*)) as item () \* { for $row in $test/\*:row return ('"\<row", "',data($row), '" ') }; declare variable $test as element(\*) external; xf:test($test)\`

回答 1 投票 0





如何正确禁用 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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.