我必须使用 XSLT 2.0 处理器来实现字符串操作函数,如 replace()。
我在 POM 文件中添加了撒克逊的依赖项并运行了“mvn install”命令。通过执行此操作,“saxon-9.1.0.8.jar”被添加到“引用的库”文件夹下。
在代码中,我使用了System.set属性("javax.xml.transform.TransformerWorks","net.sf.saxon.TransformerFactoryImpl");
当我尝试调用下面一行< code > transformer factory . new instance(" net . SF . Saxon . transformer factory impl ",null);
我收到一条错误消息
javax.xml.transform.TransformerFactoryConfigurationError: Provider net.sf.saxon.TransformerFactoryImpl not found.
如果我尝试调用新的net.sf.saxon。转换器FactoryImpl()
,我得到的错误为java.lang.NoClassDefFoundError:net/sf/saxon/TransformerFactoryImpl
请让我知道,如果我在配置撒克逊与日食靛蓝的东西。
下面的简单示例:
确保 saxon9ee.jar 在您的类路径中
movie.xml
<?xml version="1.0" encoding="UTF-8"?>
<movies>
<movie>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</movie>
<movie>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</movie>
<movie>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</movie>
<movie>
<title>Still got the blues</title>
<artist>Gary Moore</artist>
<country>UK</country>
<company>Virgin records</company>
<price>10.20</price>
<year>1990</year>
</movie>
<movie>
<title>Eros</title>
<artist>Eros Ramazzotti</artist>
<country>EU</country>
<company>BMG</company>
<price>9.90</price>
<year>1997</year>
</movie>
<movie>
<title>One night only</title>
<artist>Bee Gees</artist>
<country>UK</country>
<company>Polydor</company>
<price>10.90</price>
<year>1998</year>
</movie>
</movies>
movie.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>Movies</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
<th style="text-align:left">Country</th>
</tr>
<xsl:for-each select="movies/movie">
<xsl:sort select="country"></xsl:sort>
<!-- IF CONDITION -->
<xsl:if test="country='USA'">
<tr>
<td>
<xsl:value-of select="title" />
</td>
<td>
<xsl:value-of select="artist" />
</td>
<td>
<xsl:value-of select="country" />
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
SaxonDemo.java
import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class SaxonDemo {
public static void main(String[] args) throws Exception {
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
transform("movie.xml", "movie.xsl");
}
public static void transform(String xmlFile, String xslFile) throws TransformerException,
TransformerConfigurationException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(new File(xslFile)));
transformer.transform(new StreamSource(new File(xmlFile)), new StreamResult(System.out));
}
}
在命令行中运行
C:\Users\ranjiths>java -jar C:\ranjiths\T3\ws\XSLTDemo\lib\saxon9ee.jar C:\ranjiths\T3\ws\XSLTDemo\testdata\xml\movie.xml C:\ranjiths\T3\ws\XSLTDemo\testdata\xsl\movie.xsl
输出:
<html>
<body>
<h2>Movies</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
<th style="text-align:left">Country</th>
</tr>
<tr>
<td>Empire Burlesque</td>
<td>Bob Dylan</td>
<td>USA</td>
</tr>
<tr>
<td>Greatest Hits</td>
<td>Dolly Parton</td>
<td>USA</td>
</tr>
</table>
</body>
</html>
我同意迈克尔的观点,你没有在你的类路径上正确地包含Saxon jar文件。我想在eclipse中有一个选项可以通过单击项目-构建路径-添加jar来添加jar文件(类似的东西。)。试试看,构建你的工作区可能会有所帮助。
请确保您已在构建路径中包含撒克逊
罐。然后在源代码中,以下行应该有效:
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
TransformerFactory tfactory = TransformerFactory.newInstance();
我能够在Java中使用XSLT1.0,如以下示例所示:- copy.xml copy.xsl copy.java 输出
问题内容: 这是一个简单的问题,但我找不到答案。我正在尝试使用Java处理XSLT 2.0样式表。它依赖于Saxon的XSL元素。 我当前的班级可以在简单的XSLT 1.0上正常工作,但是在用Saxon构建的2.0 XSLT上出现无法识别元素的错误。 我不知道如何告诉Java将Saxon用作处理器。我在课堂上使用javax.xml.transform。这是我可以设置的属性吗?我该怎么设置?谢谢!
问题内容: 这是我的代码: 我得到这个: 这意味着当我通过明确创建工厂时,Java正在使用类。 (实际上,我只需要在xpaths中放置一些…因此,如果知道不涉及Saxon的任何解决方案,请考虑达到了我的需要)。 我究竟做错了什么 ? 问题答案: 从撒克逊人的例子: 工作良好。
问题内容: 我需要使用python处理XSLT,目前我正在使用仅支持XSLT 1的lxml,现在我需要处理XSLT 2,有没有办法在Python中使用saxon XSLT处理器? 问题答案: 有两种可能的方法: 设置一个接受转换请求的HTTP服务,并通过从Java调用Saxon来实现它们;然后您可以通过HTTP通过Python发送转换请求 使用Saxon / C产品 (当前在预发行版中可用) :此
问题内容: 我正在开发一个Java脚本客户端应用程序,在服务器端我需要处理CORS,以及我用JERSEY用JAX-RS编写的所有服务。我的代码: 到目前为止,我收到错误消息在请求的资源上没有标头。因此,不允许访问源’ http:// localhost:8080 ‘。” 问题答案: 注意:请务必阅读底部的UPDATE @CrossOriginResourceSharing 是CXF批注,因此不适用
是否有办法过滤掉所有大于最大值的值,这些值可以使用Stream API存储在中? 目前的情况是,你可以在前端用一个简单的搜索栏搜索一些客户的身份证。 例如: