XML 到使用 XSLT 换行的文本转换
XML to Text transform using XSLT with new line
我查看了多个示例并逐一尝试。不知道我错过了什么。我发现与其他示例的唯一区别是我在 <RecordSet>
.
下有多个 <Line>
节点
XML:
<?xml version="1.0" encoding="utf-8"?>
<urn:FlatStructure">
<Recordset>
<Line> 12345678</Line>
<Line> abcdefgh</Line>
</Recordset>
</urn:FlatStructure>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<!-- First Trial -->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/urn:FlatStructure/RecordSet">
<xsl:value-of select="concat(Line,$newline)" />
</xsl:template>
<!-- Second Trial -->
<xsl:template match="/urn:FlatStructure">
<xsl:apply-templates select="RecordSet/Line" />
</xsl:template>
<!-- Third Trial -->
<xsl:template match="/urn:FlatStructure">
<xsl:value-of select="concat(Line,' ')" />
</xsl:template>
</xsl:stylesheet>
当前文本输出:
12345678 abcdefgh
所需的文本输出:
12345678
abcdefgh
我在 XSLT 中缺少什么?请让我知道如何更正它。
谢谢
我查看了以下示例(有些可能重复),但其中 none 对我有用:
XSLT to convert XML to text
Producing a new line in XSLT
how to add line breaks at the end of an xslt output?
not adding new line in my XSLT
有帮助的是用
替换换行符变量,例如
<xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable>
因此替换
<xsl:value-of select="concat(Line,' ')" />
和
<xsl:value-of select="concat(Line,$newline)" />
这给出了预期的结果。
但是,您的代码有一些命名空间问题需要解决...
因此,将 urn:
命名空间添加到您的 XML
<urn:FlatStructure xmlns:urn="http://some.urn">
和像这样的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:urn="http://some.urn">
然后,从 XSLT 模板的 FlatStructure
匹配项中删除 urn
前缀。
找到解决方案。遍历 <Recordset>
下的每个 <Line>
节点并选择文本。
有效的 XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:urn="someurn">
<xsl:output method="text" />
<xsl:template match="/urn:FlatStructure/Recordset">
<xsl:for-each select="Line">
<xsl:value-of select="text()"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
似乎是多个子节点同名的问题。
感谢大家的参与。
干杯!
我查看了多个示例并逐一尝试。不知道我错过了什么。我发现与其他示例的唯一区别是我在 <RecordSet>
.
<Line>
节点
XML:
<?xml version="1.0" encoding="utf-8"?>
<urn:FlatStructure">
<Recordset>
<Line> 12345678</Line>
<Line> abcdefgh</Line>
</Recordset>
</urn:FlatStructure>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<!-- First Trial -->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/urn:FlatStructure/RecordSet">
<xsl:value-of select="concat(Line,$newline)" />
</xsl:template>
<!-- Second Trial -->
<xsl:template match="/urn:FlatStructure">
<xsl:apply-templates select="RecordSet/Line" />
</xsl:template>
<!-- Third Trial -->
<xsl:template match="/urn:FlatStructure">
<xsl:value-of select="concat(Line,' ')" />
</xsl:template>
</xsl:stylesheet>
当前文本输出:
12345678 abcdefgh
所需的文本输出:
12345678
abcdefgh
我在 XSLT 中缺少什么?请让我知道如何更正它。
谢谢
我查看了以下示例(有些可能重复),但其中 none 对我有用:
XSLT to convert XML to text
Producing a new line in XSLT
how to add line breaks at the end of an xslt output?
not adding new line in my XSLT
有帮助的是用
替换换行符变量,例如
<xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable>
因此替换
<xsl:value-of select="concat(Line,' ')" />
和
<xsl:value-of select="concat(Line,$newline)" />
这给出了预期的结果。
但是,您的代码有一些命名空间问题需要解决...
因此,将 urn:
命名空间添加到您的 XML
<urn:FlatStructure xmlns:urn="http://some.urn">
和像这样的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:urn="http://some.urn">
然后,从 XSLT 模板的 FlatStructure
匹配项中删除 urn
前缀。
找到解决方案。遍历 <Recordset>
下的每个 <Line>
节点并选择文本。
有效的 XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:urn="someurn">
<xsl:output method="text" />
<xsl:template match="/urn:FlatStructure/Recordset">
<xsl:for-each select="Line">
<xsl:value-of select="text()"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
似乎是多个子节点同名的问题。
感谢大家的参与。
干杯!