我的XML:
<root>
<summary>
<article_1>some data
</article_1>
</summary>
<summary>
<article_1>some data
</article_1>
</summary>
.
.
.
</root>
我正在尝试将所有摘要标记复制到单独的文件中,但是当XSLT转换完成后,我在新创建的文件中丢失了换行符。
我的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" version="1.0" encoding="UTF-8" standalone="yes"/>
<xsl:template match="summary">
<xsl:result-document href="{@summary}.xml">
<xsl:copy-of select="." />
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
我做错了什么,为什么我新创建的XML中没有换行符?
答案 0 :(得分:1)
无论您是否编码,换行符都被视为空格。您可以添加指令:
<xsl:preserve-space elements="article_1"/>
确保保留空白区域。
答案 1 :(得分:0)
即使它们看起来已经消失,你也不会丢失任何换行符(新行)。
假设一个明智的输入XML :
<?xml version="1.0" encoding="utf-8"?>
<root>
<summary number="1">
<article_1>text1
</article_1>
</summary>
<summary number="2">
<article_1>text2
</article_1>
</summary>
<!--...-->
</root>
这个样式表(这是在XSLT 2.0中,当您使用result-document()
时):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" version="1.0" encoding="UTF-8" standalone="yes"/>
<xsl:template match="summary">
<xsl:result-document href="{@number}.xml">
<xsl:copy-of select="." />
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
这会产生几个输出文档,就像这里显示的1.xml
一样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><summary number="1">
<article_1>text1
</article_1>
</summary>
正如您所看到的,还有一条新线。它不再被编码为实体引用(

),而是转换为实际的中断。如果您使用像Firefox这样的浏览器查看结果文件,可能会让您误以为新行不再存在,但这只是由浏览器解析器自动应用的格式。
请注意,除了换行问题,您的帖子还有严重问题。
@summary
,但在输入XML中没有这样的属性。在我已经显示的输入中,有一个number
属性被翻译成文件名。result-document()
函数(即使用XSLT 2.0处理器)。那么为什么你的样式表在version="1.0"
?答案 2 :(得分:0)
如果您的XML输入使用CDATA,则可以在XSL中进行 linefeed-treatment =“ preserve”
示例: XML输入
<data>
<Alert>
<![CDATA[PredniOD
Ca32mg Mane
Cholenthly]]>
</Alert>
</data>
XSL 1.0
<fo:block linefeed-treatment="preserve">
<xsl:value-of select="data/Alert" />
</fo:block>
输出
PredniOD
Ca32mg Mane
Cholenthly
其他有用的
white-space-collapse =“ false” white-space-treatment =“ preserve”
答案 3 :(得分:0)
我在XSLT中得到了保留了换行符的变量。但是,当使用XSL转换为HTML时,不会保留换行符。然后了解使用
{
"error": {
"message": "(#33) This object does not exist or does not support this action",
"type": "OAuthException",
"code": 33,
"fbtrace_id": "A7EHydY_B4x......."
}
}
现在能够保留来自源的换行符