我有一个xml文件:
<Order>
<EP>
<Name>Generation Date</Name>
<Value>2009-08-04+05:30</Value>
</EP>
<EP>
<Name>NoOfRecords</Name>
<Value>100</Value>
</EP>
<OrderLineItems>
<OrderLineItem OrderDateTime="2007-01-01T17:09:04.593+05:30>
<Customer>
<FullName>Mrs S </FulName>
<Address>
<AddressLine1>ABC</AddressLine1>
<AddressLine2>XYZ</AddressLine2>
</Address>
</Customer>
<EP>
<Name>DealerAccount</Name>
<Value>00000000000</Value>
</EP>
</OrderLineItem>
</OrderLineItems>
</Order>
OrderLineItem标记重复的位置。现在我想使用xslt将此xml转换为文本文件。平面文件的格式是固定的,如下所示:
00000000000010107 Mrs S ABC XYZ
00000000000150709 Mr x PQR TWR
其中第一列包含Dealeraccount和orderDate(删除时间)第二个字段是name,第三个和第四个字段分别是addressline 1和addressline2。 请注意,文本文件的格式是必须的,我也有每个字段的长度,如名称的长度是varchar2(50),依此类推。
答案 0 :(得分:1)
好吧我终于得到了......解决方案
<xsl:template name="ColumnSeparator">
<xsl:param name="count" select="1"/>
<xsl:param name="separator" select="' '"/>
<xsl:if test="$count > 0">
<xsl:value-of select="$separator"/>
<xsl:call-template name="ColumnSeparator">
<xsl:with-param name="count" select="$count - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
然后只需使用以下方法调用此模板:
<xsl:call-template name="ColumnSeparator">
<xsl:with-param name="count" select="50-string-length(Customer/FullName)"/>
</xsl:call-template>
答案 1 :(得分:0)
这样的东西应该有效 - 对于确切的格式,你需要调整<xsl:text>
部分 - 添加更多空格或其他分隔符:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="text" indent="no"/>
<xsl:template match="Order">
<xsl:apply-templates select="OrderLineItems/OrderLineItem" />
</xsl:template>
<xsl:template match="OrderLineItem">
<xsl:value-of select="EP/Value"/>
<xsl:text> </xsl:text>
<xsl:value-of select="Customer/FullName"/>
<xsl:text> </xsl:text>
<xsl:value-of select="Customer/Address/AddressLine1"/>
<xsl:text> </xsl:text>
<xsl:value-of select="Customer/Address/AddressLine2"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
在格式化XSLT中的原始文本输出方面你不能做更多的事情 - 遗憾的是,这种方式非常有限。
马克