Java XSL转换的异常输出
我有一个xml文档和一个样式表,可以将文档转换为另一个有用的xml。 作为参考,xml文档有点像这样: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> &
<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,我还没有遇到过这样的问题。我们可以关闭这种默认行为吗?如果我希望此默认行为正常工作,但应返回节点内的值,而不是作为单独的值。默认值不可更改,但您可以通过匹配根,然后选择要处理的内容来关闭它。当您匹配要控制的根时,默认值将不适用,除非您再次使用显式调用它们,并且此时没有其他模板匹配上下文。