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

如何在Saxon HE中使用XSLT fn:document函数来读取XML字符串?

孙成益
2023-03-14

我正在使用。撒克逊河的网络版。

我编写了一些代码来设置XSLT转换,其中源XSLT是从外部传入的(不是在运行时从文件读取)。

这是我的代码片段:

Saxon.Api.Processor processor = new Saxon.Api.Processor();

// Feed the XSLT into Saxon
XmlDocument document = new XmlDocument();
document.LoadXml(xslt);
Saxon.Api.XdmNode input = processor.NewDocumentBuilder().Build(document);
Saxon.Api.XsltCompiler xsltCompiler = processor.NewXsltCompiler();
Saxon.Api.XsltExecutable xsltExecutable = xsltCompiler.Compile(input);
Saxon.Api.XsltTransformer xsltTransformer = xsltExecutable.Load();

// Create The stream that will contain the transformed XML.
MemoryStream transformedXmlStream = new MemoryStream();
xsltTransformer.InputXmlResolver = null;
// Input the XML into the transformer.
xsltTransformer.InitialContextNode = processor.NewDocumentBuilder().Build(inputXml);
// Set up the serializer that will output the result.
Saxon.Api.Serializer dataSerializer = processor.NewSerializer(transformedXmlStream);
// Run the transformation and get the output as a stream.
xsltTransformer.Run(dataSerializer);

到目前为止,这段代码非常有效!

然而,我有一个新的需求问题。我被要求使用document()函数实现一些功能,这需要另一个具有自己BaseURI的XML文档。

与XSLT和输入XML一样,另一个文档将作为字符串或流直接输入到程序中。问题是,我很难弄清楚如何将文档输入到Saxon,该文档将被document()函数引用。

如何使用document()函数在Saxon XSLT中读取XML流?

共有1个答案

潘弘壮
2023-03-14

将xsltTransformer的InputXmlResolver属性设置为XmlResolver,该XmlResolver可以识别传递给document()函数的URI并返回相应的输入流。

 类似资料:
  • 问题内容: 我第一次使用stax解析XML字符串。我找到了一些示例,但无法使我的代码正常工作。这是我的代码的最新版本: 我将手表放在“事件”和“ reader.getElementText()”上。当代码停止时 将显示“ reader.getElementText()”值,但是一旦它偏离该行,就无法评估。当代码停止时: “元素”手表显示正确的值。最后,当我又将代码步进一行时,我捕获了此异常: 我尝

  • 问题内容: 如何在Java中使用XPath读取XML? 问题答案: 你需要遵循以下要求: 然后,调用传入该代码中定义的文档和所需的返回类型,并将结果转换为结果的对象类型。 如果你需要有关特定XPath表达式的帮助,则可能应该将其作为单独的问题进行询问(除非首先是你的问题-我理解你的问题是如何在Java中使用API​​)。 此XPath表达式将为你提供下第一个URL元素的文本: 这将使你获得第二个:

  • 问题内容: 我想使用Java中的XPath读取XML数据,因此对于我收集的信息,我无法根据需要解析XML。 这是我想做的: 通过其URL从联机获取XML文件,然后使用XPath对其进行解析,我想在其中创建两个方法。一种是输入特定的节点属性ID,然后得到所有的子节点,第二种是假设我只想获得一个特定的子节点值 在上面的示例中,如果我通过@name搜索,我想读取所有元素,并且我想只从@name’Java

  • 问题内容: 我正在尝试: 但是解析器说: 如何在那里使用? 问题答案: 您不能(在XML 1.0中)。在XML 1.1中,可以使用的字符范围更大,并且字符的表达方式有所不同,但是即使那样,它也是“受限的”(十六进制为),据我所知,这意味着它是无效的XML,即使XML解析器应成功处理它。请注意,“ null”字符()永远无效。这是有关这些XML字符的Wiki文章 您可以尝试将XML文档强制设置为XM

  • 我刚来Java,如果这是个明显的问题,我很抱歉。 我正在尝试逐个字符读取字符串以创建树节点。例如,输入,节点为 我注意到了 我可以用一个循环来获得所有的角色吗?就像 我试过了,但不管用。 我该怎么做? 非常感谢你的帮助。 扫描器读取器=新扫描器(System.in);System.out.println(“将节点输入为大写字母,不带空格,结尾为'/'”);int i=0;char node=rea

  • 问题内容: 我使用的是MIDP 2.0(JSR 118),我只是注意到J2ME中没有用于字符串的读取器。 有谁知道您应该如何从或以与平台无关的方式(即在两个具有不同型号的启用Java的手机之间)读取字符串? 问题答案: 或者看看。 它确实需要对InputStream上读取的字符串进行适当的编码(如对应的),因此它可能不是您想要的- 但它确实可以在不同的手机/型号等上工作。