Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Xml XSLT追加Ctrl+;每行末尾有M个字符_Xml_Xslt - Fatal编程技术网

Xml XSLT追加Ctrl+;每行末尾有M个字符

Xml XSLT追加Ctrl+;每行末尾有M个字符,xml,xslt,Xml,Xslt,我正在尝试使用xslt转换xml文档。虽然我得到了所需的结果,但我在文档末尾看到了ctrl+M char。如何确保在行尾之前未填充额外的^M <xsl:template match="node()|@*" name="identity"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>

我正在尝试使用xslt转换xml文档。虽然我得到了所需的结果,但我在文档末尾看到了ctrl+M char。如何确保在行尾之前未填充额外的^M

<xsl:template match="node()|@*" name="identity">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

这不是dos到unix的问题。我正在linux平台上为一个文档运行xslt

下面是示例输出

<variables>^M$
    <variable name="enableLog" value="false" />^M$
    <variable name="enableCache" value="true" />^M$
    <variable name="protocol" value="http" />^M$
    <variable name="port" value="8080" />^M$
 </varilabes>^M$ 
^M$
^M$
^M$
^M$
^M$
^百万美元

我认为你所说的Ctrl+M字符,实际上是a,一些编辑器将其显示为
^M
。如果在显示Ctrl-J/Ctrl-M(换行符、回车符)字符的不支持XML的编辑器中查看生成的XML,那么这就是在每行末尾看到这些字符的原因

在XML中使用Ctrl-M作为行尾字符是完全有效的。事实上,它甚至被推荐。创建XML(包括XSLT处理器)的产品可以在换行符和回车符之间进行选择,或者在换行符和回车符之间进行选择。更具体地说,来自:

2.11线端处理
XML解析的实体通常存储在计算机文件中,为了便于编辑,这些文件被组织成行。这些行通常由回车符(#xD)和换行符(#xA)的组合分隔

由于XML是用于机器阅读的,并且是人类可读的,所以选择一个理解XML的编辑器,就像或者,甚至,或者一些简单的东西就足够了,它们都理解行尾

注意:如果确实要删除任何和所有行尾,请将以下内容添加到样式表中:

<xsl:strip-space elements="*" />
<xsl:output indent="no" />

并确保应用了所有文本节点,以便可以执行以下操作来删除被认为重要的空文本节点:

<xsl:template match="text()[not(normalize-space())]" />

但是,这仍然会留下任何已经有换行符的文本节点。如果您也需要删除这些,请执行以下操作:

<xsl:template match="text()">
    <xsl:value-of select="translate(., '&#xA;&#xD', '  ')"/>
</xsl:template>


请向我们展示输入文档、完整的样式表代码和完整的输出文档。显然,您所展示的不是输出文档—XSLT永远不会生成以
/variables
结尾的
变量
元素。告诉我们文件是如何保存的,您是如何调用转换的,您使用的是什么风格的linux,您使用的是哪个XSLT处理器,以及您使用的是什么应用程序来查看结果。感谢您的输入。我在同一行还有另一个问题。内联注释将被移动到除ctrl+m之外的下一行。你知道这种行为吗?是否由于在元素末尾插入回车符?我应该如何保留原始的行尾字符请不要在评论中提出补充问题。提出一个新问题。@prabhushankar:我同意Michael Kay的观点,请提出一个新问题(并在这样做时遵循Matthias的建议)。但归根结底是XML,扩展一下,XSLT并不是用来处理行尾字符的,因为它们在XML中是不相关的。但是,在您正确应用上述解决方案后,这些行尾字符将被删除。如果没有,用一个可重复的、最少的例子来说明你在一个新问题中做了什么。