Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 为什么<;xsl:for each select=";text()&燃气轮机;忽略空白?_Xslt - Fatal编程技术网

Xslt 为什么<;xsl:for each select=";text()&燃气轮机;忽略空白?

Xslt 为什么<;xsl:for each select=";text()&燃气轮机;忽略空白?,xslt,Xslt,为什么忽略空格 示例XML源: <body> Things<note>such as people</note> <note>or animals</note>act in crazy ways. </body> 人或动物的行为都是疯狂的。 示例XSL: <xsl:template match="body"> <output> <xsl:for-each selec

为什么
忽略空格

示例XML源:

<body>
Things<note>such as people</note> <note>or animals</note>act in crazy ways.
</body>

人或动物的行为都是疯狂的。
示例XSL:

<xsl:template match="body">
    <output>
        <xsl:for-each select="text()">
            <text>
                 <xsl:value-of select="."/>
            </text>
        </xsl:for-each>
    </output>
</xsl:template>

我希望这一产出:

<output>
    <text>Things</text><text> </text><text>act in crazy ways.</text>
</output>

事情发展得很疯狂。
但我得到的是:

<output>
    <text>Things</text><text>act in crazy ways.</text>
</output>

事情都很疯狂。
有人能告诉我这是怎么回事吗

谢谢

这并不是说
忽略空白文本节点,而是说,只有空白的文本节点在解析输入文档时可能会在样式表模板看到它们之前被剥离

根据XSLT规范,XSLT默认情况下从样式表文档中除去
元素中的纯空白文本节点;但除非您使用
,否则不会从源文档中删除它们

以下是对它的描述:

在源文档的树之后 或样式表文档已被删除 建造,但在建造之前 否则由XSLT处理一些文本 节点被剥离。文本节点是 除非它只包含 空白字符。剥离 文本节点从中删除文本节点 那棵树。汽提过程需要几分钟 作为一组元素名称的输入 必须保留哪些空白。 汽提工艺适用于: 样式表和源文档, 但是保留空白的集合 元素名称已确定 对于样式表和 源文件

如果出现以下情况,则保留文本节点: 以下情况适用:

  • 文本节点父节点的元素名位于保留空白的元素名集中

  • 文本节点至少包含一个非空白字符。与XML中一样,空白字符是#x20、#x9、#xD或#xA

  • 文本节点的祖先元素有一个值为preserve的xml:space属性,没有一个更接近的祖先元素有值为default的xml:space属性

否则,将剥离文本节点

xml:space属性不可用 从树上剥去

注意:这意味着如果在 文本结果元素,它将是 包括在结果中

对于样式表,一组 保留空格的元素名 只包含xsl:text

对于源文档,设置 保留空白的元素名称是 由xsl指定:strip space和 xsl:保留顶级元素的空间。这些元素都有一个elements属性,其值是以空格分隔的nametest列表最初,保留空白的元素名称集包含所有元素名称。[emphasis mine]如果元素名称与xsl:strip space元素中的NameTest匹配,则它将从保留空白的元素名称集中删除。如果元素名与xsl:preserve-space元素中的NameTest匹配,那么它将添加到保留空白的元素名集中

总之,剥离不应该发生在源文档中。。。除非在样式表中使用顶级元素。如果您没有使用
,请告诉我们有关XSLT处理器和顶级样式表元素的更多信息

根据,并不是每个XSLT处理器都遵守规范中描述的默认行为。您可以尝试将以下内容作为
的子项添加,看看它是否解决了问题:

<xsl:preserve-space elements="*"/>

这并不是说
忽略空白文本节点,而是在解析输入文档时,在样式表模板看到它们之前,纯空白文本节点可能会被剥离

根据XSLT规范,XSLT默认情况下从样式表文档中除去
元素中的纯空白文本节点;但除非您使用
,否则不会从源文档中删除它们

以下是对它的描述:

在源文档的树之后 或样式表文档已被删除 建造,但在建造之前 否则由XSLT处理一些文本 节点被剥离。文本节点是 除非它只包含 空白字符。剥离 文本节点从中删除文本节点 那棵树。汽提过程需要几分钟 作为一组元素名称的输入 必须保留哪些空白。 汽提工艺适用于: 样式表和源文档, 但是保留空白的集合 元素名称已确定 对于样式表和 源文件

如果出现以下情况,则保留文本节点: 以下情况适用:

  • 文本节点父节点的元素名位于保留空白的元素名集中

  • 文本节点至少包含一个非空白字符。与XML中一样,空白字符是#x20、#x9、#xD或#xA

  • 文本节点的祖先元素有一个值为preserve的xml:space属性,没有一个更接近的祖先元素有值为default的xml:space属性

否则,将剥离文本节点

xml:space属性不可用 从树上剥去

注意:这意味着如果在 文本结果元素,它将是 包括在结果中

对于样式表,一组 保留空格的元素名 只包含xsl:text

对于源文档,设置 保留空白的元素名称是 由xsl指定:strip space和 xsl:保留顶级元素的空间。这些元素都有一个elements属性,其值为空格sepa