Java XSL转换的异常输出

Java XSL转换的异常输出,java,xml,transformation,xslt,Java,Xml,Transformation,Xslt,我有一个xml文档和一个样式表,可以将文档转换为另一个有用的xml。 作为参考,xml文档有点像这样: <root> <element1>value1</element1> <element2>value2</element2> <element3>value3</element3> <element4>..some more levels of data</element4> &

我有一个xml文档和一个样式表,可以将文档转换为另一个有用的xml。 作为参考,xml文档有点像这样:

<root>
 <element1>value1</element1>
 <element2>value2</element2>
 <element3>value3</element3>
 <element4>..some more levels of data</element4>
</root>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="errorResponse.xsl"/>
<xsl:template match="root/element4">
        <xsl:element name="myRoot">
            <xsl:element name="myElement">
                <xsl:apply-templates select="./someElement/someOtherElement"/>
            </xsl:element>
        </xsl:element>
</xsl:template>
<?xml version="1.0" encoding="ISO-8859-1"?>
value1
value2
value3
<myRoot><myelement> some data </myElemrnt></myroot>
但是,输出的格式不符合要求。我不想要价值1,价值2,价值3。这也为生成的待处理的新XML进一步制造了问题

我看到了很多关于转换的问题。这困扰了我很长时间。如果有人能指出我的错误,我将不胜感激

还要指出我在整个过程中是否遵循了任何不正确的约定


感谢和问候。

您之所以获得该输出是因为,它输出文本节点。如果您不想使用这些节点,则需要通过匹配这些节点并将其替换为空模板来明确排除它们

尝试将此模板添加到样式表:

<xsl:template match="/">
  <xsl:apply-templates select="root/element4"/>
</xsl:template>

它匹配根并丢弃除根/element4之外的所有内容。

您之所以获得该输出是因为,它输出文本节点。如果您不想使用这些节点,则需要通过匹配这些节点并将其替换为空模板来明确排除它们

尝试将此模板添加到样式表:

<xsl:template match="/">
  <xsl:apply-templates select="root/element4"/>
</xsl:template>
它匹配根并丢弃除root/element4之外的所有内容。

这里发生的是,XSLT应用于任何未被模板显式匹配的节点。内置模板的净效果是复制将tey应用于输出的任何文本节点

抑制此不需要的输出的最简单和最短方法之一是添加以下模板:

<xsl:template match="text()"/>
这会导致选择执行此模板的任何文本节点都不会复制到输出中。

这里发生的情况是,XSLT应用于任何未被模板显式匹配的节点。内置模板的净效果是复制将tey应用于输出的任何文本节点

抑制此不需要的输出的最简单和最短方法之一是添加以下模板:

<xsl:template match="text()"/>

这会导致选择执行此模板的任何文本节点都不会复制到输出。

您希望从样式表中获得什么样的确切输出?如果没有这一点,将无法帮助您…在使用任何其他XSLT处理器时是否也会发生此错误?有些浏览器可以为您做到这一点,或者使用Saxon,您希望从样式表中获得什么样的确切输出?如果没有这一点,将无法帮助您…在使用任何其他XSLT处理器时是否也会发生此错误?有些浏览器可以为您做到这一点,或者使用SaxonI尝试匹配根元素,然后使用整个xpath进行模板化。就是这样。非常感谢你。然而,我曾经使用过一些XSLT,我还没有遇到过这样的问题。我们可以关闭这种默认行为吗?如果我希望此默认行为正常工作,但应返回节点内的值,而不是作为单独的值。默认值不可更改,但您可以通过匹配根,然后选择要处理的内容来关闭它。当您匹配要控制的根时,默认值将不会应用,除非您再次显式调用它们,并且此时没有其他模板匹配上下文。我尝试匹配根元素,然后使用整个xpath进行模板化。就是这样。非常感谢你。然而,我曾经使用过一些XSLT,我还没有遇到过这样的问题。我们可以关闭这种默认行为吗?如果我希望此默认行为正常工作,但应返回节点内的值,而不是作为单独的值。默认值不可更改,但您可以通过匹配根,然后选择要处理的内容来关闭它。当您匹配要控制的根时,默认值将不适用,除非您再次使用显式调用它们,并且此时没有其他模板匹配上下文。