标签: xalan

NAMESPACE_ERR:尝试以对名称空间不正确的方式创建或更改对象

尝试从SOAP响应中检索SOAP正文,但是收到此错误:

NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.

Document doc = soapResMsg.getSOAPBody().extractContentAsDocument(); -- Exception is thrown here
org.dom4j.io.DOMReader d4Reader = new org.dom4j.io.DOMReader();
org.dom4j.Document d4doc = d4Reader.read(doc);
Run Code Online (Sandbox Code Playgroud)

使用Saaj1.4

对此有什么解决方法?

java xml webservice-client xalan saaj

18
推荐指数
5
解决办法
4万
查看次数

如何在xslt中使用参数作为XPath?

我想在xml文档中添加一个元素,我想将参数作为参数传递给元素.

sample.xml文件:

<?xml version="1.0"?>
<stuff>
  <element1>
    <foo>2</foo>
<bar/>
  </element1>
  <element2>
<subelement/>
<bar/>
   </element2>
   <element1>
     <foo/>
 <bar/>
   </element1>
 </stuff>
Run Code Online (Sandbox Code Playgroud)

使用:

xalan.exe -p myparam "element1" sample.xml addelement.xslt
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:

<?xml version="1.0"?>
<stuff>
  <element1>
    <foo>2</foo>
    <bar/>
    <addedElement/>
  </element1>
  <element2>
<subelement/>
<bar/>
   </element2>
   <element1>
     <foo/>
 <bar/>
     <addedElement/>
   </element1>
 </stuff>
Run Code Online (Sandbox Code Playgroud)

我已经设法编写addelement.xslt,当硬编码它的工作路径时,但是当我尝试在match属性中使用参数myparam时,我得到:

XPathParserException: A node test was expected.
pattern = '$myparam/*[last()]' Remaining tokens are:  ('$' 'myparam' '/' '*' '[' 'last' '(' ')' ']') (addelement.xslt, line 12, column 42)
Run Code Online (Sandbox Code Playgroud)

addelement.xslt

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="@*|node()"> …
Run Code Online (Sandbox Code Playgroud)

xml xslt parameters xpath xalan

12
推荐指数
1
解决办法
1万
查看次数

如何使xsl转换缩进输出?

我正在使用xalan和以下xsl标头:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0"
    xmlns:redirect="http://xml.apache.org/xalan/redirect"
    extension-element-prefixes="redirect"
    xmlns:xalan="http://xml.apache.org/xalan">
<xsl:output method="text" indent="yes" xalan:indent-amount="4"/>
Run Code Online (Sandbox Code Playgroud)

并且输出没有缩进.

谁有想法?

xslt indentation xalan

11
推荐指数
3
解决办法
3万
查看次数

TransformerFactory 和 Xalan 依赖冲突

我有以下代码:

javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
javax.xml.transform.Transformer transformer = factory.newTransformer();
Run Code Online (Sandbox Code Playgroud)

这正常工作正常。但是,我还需要在我的 pom.xml 中添加 Xalan 作为依赖项,当我这样做时,上面的代码现在抛出一个错误:

java.lang.IllegalArgumentException: Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD
Run Code Online (Sandbox Code Playgroud)

我认为这与 Xalan 的 jar 中有不同的 Transformer 实现有关。如何在不更改上述代码并将 Xalan 作为依赖项的情况下解决此冲突?

java xml xalan maven

10
推荐指数
2
解决办法
2万
查看次数

Java 6中对xinclude的默认支持?

我在我的应用程序中看到,在我的解析XML文件中包含xinclude在我的Java XSLT转换中不起作用.

但是,虽然我这样做:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setXIncludeAware(true);
Run Code Online (Sandbox Code Playgroud)

我不是专门设置变压器工厂为System.getProperty("javax.xml.transform.TransformerFactory")返回"null".

我的问题:默认的Java(1.6或6)是否支持xinclude,还是我必须添加替代的XSLT解析器,例如Apache Xerces?

java xml xslt xinclude xalan

9
推荐指数
1
解决办法
6394
查看次数

Xalan的TransformerFactoryImpl是线程安全的吗?

org.apache.xalan.processor.TransformerFactoryImpl线程安全吗?或者我必须为每个线程保留本地副本?

java xalan thread-safety

8
推荐指数
1
解决办法
1829
查看次数

XSLT document():多次调用它会慢吗?

更新17.Jul.2013:
XALAN 2.7 不缓存 document()请求中的呼叫.因此,将每个所需文档存储在XSL中的变量中至关重要.


我已经搜索了很长一段时间,并没有找到我的简单问题的具体答案:

哪种方法更快或者编译器是否"足够"以便两种变体都相同?

注意:我使用的是Xalan 2.7(JDK 1.6中的默认实现):

1)我必须读取外部XML中的属性:

<xsl:value-of select="document($path)/person/address/city"/>
Run Code Online (Sandbox Code Playgroud)

每当我需要这个城市时,我都会使用上面的表达式(让我们说100次)

2)我没有调用document()100次,而是将XML节点存储在变量中:

<xsl:variable name="node" select="document($path)"/>
Run Code Online (Sandbox Code Playgroud)

然后我用了100次

<xsl:value-of select="$node/person/address/city"/>
Run Code Online (Sandbox Code Playgroud)

哪一个更快,更好,原因是什么?谢谢!

java xml xslt xalan

8
推荐指数
1
解决办法
1064
查看次数

Java/XSLT:找不到匹配的1参数函数

我收到以下错误:

javax.servlet.ServletException: Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate()
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
Run Code Online (Sandbox Code Playgroud)

我的xslt文件的顶部是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"   
    xmlns:dyn="http://exslt.org/dynamic" 
    extension-element-prefixes="dyn"> 
Run Code Online (Sandbox Code Playgroud)

你知道为什么我会收到这个错误吗?

UPDATE

我的XML文件的顶部现在读取.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0"
     xmlns:xalan="http://xml.apache.org/xalan" 
     exclude-result-prefixes="xalan">
Run Code Online (Sandbox Code Playgroud)

我们失败的XML是

<xsl:template name="test">
  <xsl:param name="param" />
  <xsl:value-of select="$param"/>
  <xsl:value-of select="xalan:evaluate($param)"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

此代码适用于运行Tomcat 5.0的一台服务器,但不能在运行Tomcat 5.5的服务器上运行.我想是因为代码在一台服务器上运行而不是环境问题.

XSLT通过JSP页面应用于XML.对我来说,看起来没有使用xalan.jar文件.JSP的顶部是:

<%@page import="javax.xml.transform.*"%>
<%@page import="javax.xml.transform.stream.*"%>
<%@page import="         java.security.Principal,
             java.net.URL, 
             java.net.URLConnection, 
             java.io.InputStream,
             java.io.InputStreamReader,
             java.io.Reader,
             java.io.BufferedReader,
             java.io.File,
             javax.xml.transform.*,
             javax.xml.transform.stream.*,
             javax.xml.transform.*,
             javax.xml.transform.stream.*"%>
Run Code Online (Sandbox Code Playgroud)

更新 问题是Saxon被选为XML解析器.Saxon不支持此功能.删除Saxon.jar可以解决问题.

java xslt jsp tomcat xalan

7
推荐指数
1
解决办法
8149
查看次数

将xml节点/文档/片段作为参数传递给xslt

我试图传递一个w3c.dom.Document,ElementNodeList作为参数传递给xslt变换.

我希望能够在xslt中处理它:

<xsl:param name="links" />
<xsl:template match="/">
    <record>
        <xsl:for-each select="$links/*">
            <test />
        </xsl:for-each>
    </record>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

我将参数传递为:

        Document params = createLinksParams(links);
        transformer.setParameter("links", params);
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

'从'com.sun.org.apache.xerces.internal.dom.DocumentImpl'到'node-set'的转换无效.'

我也试过exslt:node-set(),xalan:nodeset()等等,但它不工作.

似乎内部xalan除了他自己的Node实现.

如何在不引发此问题的情况下做类似的事情?

我无法使用,document($param)因为我在运行中构建了doc.

java xalan

7
推荐指数
1
解决办法
8007
查看次数

Saxon 9 XSLT变压器与Xalan 2.7

我目前正在使用Xalan 2.7.0进行基于XML的XSLT转换,但考虑切换到Saxon 9版本进行XSLT转换.所以有人可能会列出使用Saxon而不是Xalan的主要缺点和利弊.虽然我知道Saxon支持XSLT 2.0和其他重大变化,但我想更多地了解Saxon 9的个人经历及其prons和cons以及其他好处.

xslt saxon xalan

7
推荐指数
2
解决办法
1万
查看次数