Xml到格式化的文本

时间:2009-08-06 18:55:05

标签: xml text formatting xslt

我有一个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),依此类推。

2 个答案:

答案 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中的原始文本输出方面你不能做更多的事情 - 遗憾的是,这种方式非常有限。

马克