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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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中的列和标题_Xml_Xslt_Header_Xslt 1.0_Multiple Columns - Fatal编程技术网

Xml XSLT中的列和标题

Xml XSLT中的列和标题,xml,xslt,header,xslt-1.0,multiple-columns,Xml,Xslt,Header,Xslt 1.0,Multiple Columns,我有一个XSLT文件,它将XML文件转换为以制表符分隔的文件。我还向文件中添加了列标题 是否可以使用XSLT以某种方式将标题与列对齐 这是我的XSLT文件: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="wdexample.com" version="1.0"> <xsl:outp

我有一个XSLT文件,它将XML文件转换为以制表符分隔的文件。我还向文件中添加了列标题

是否可以使用XSLT以某种方式将标题与列对齐

这是我的XSLT文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="wdexample.com" version="1.0">
   <xsl:output method="text" encoding="utf-8" media-type="text/plain" />
   <xsl:strip-space elements="*" />
   <xsl:variable name="newline" select="'&#xA;'" />
   <xsl:variable name="tab" select="'&#x9;'" />
   <xsl:template match="/">
      FAO
      <xsl:value-of select="$tab" />
      FAO_REFERENCE_ID
      <xsl:value-of select="$tab" />
      FAO_TYPE
      <xsl:value-of select="$tab" />
      COMPANY_OF_FAO_DESCRIPTOR
      <xsl:value-of select="$tab" />
      COMPANY_OF_FAO_Custom_Worktag_1_ID
      <xsl:value-of select="$newline" />
      <xsl:for-each select="/wd:Report_Data/wd:Report_Entry">
         <xsl:value-of select="substring(concat(wd:FAO, ''), 1)" />
         <xsl:value-of select="$tab" />
         <xsl:value-of select="substring(concat(wd:FAO_REFERENCE_ID, ''), 1, 8)" />
         <xsl:value-of select="$tab" />
         <xsl:value-of select="substring(concat(wd:FAO_TYPE, ''), 1)" />
         <xsl:value-of select="$tab" />
         <xsl:value-of select="substring(concat(wd:COMPANY, ''), 1)" />
         <xsl:value-of select="$tab" />
         <xsl:value-of select="substring(concat(wd:COMPANY_TYPE, ''), 1)" />
         <xsl:value-of select="$tab" />
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

粮农组织
粮农组织参考号
FAO_型
公司名称
公司编号:FAO自定义工作标签编号:1
这是输入XML。在XML文件中,每个报表条目节点并不总是有值

<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="wdexample.com">
    <wd:Report_Entry>
        <wd:FAO>testFAO</wd:FAO>
        <wd:FAO_REFERENCE_ID>testRefID</wd:FAO_REFERENCE_ID>
        <wd:FAO_TYPE>testType</wd:FAO_TYPE>
        <wd:COMPANY>testCompany</wd:COMPANY>
        <wd:COMPANY_TYPE>testCompanyType</wd:COMPANY_TYPE>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:FAO>testFAO</wd:FAO>
        <wd:FAO_REFERENCE_ID>testRefID<</wd:FAO_REFERENCE_ID>
        <wd:FAO_TYPE></wd:FAO_TYPE>
        <wd:COMPANY></wd:COMPANY>
        <wd:COMPANY_TYPE>testCompanyType</wd:COMPANY_TYPE>
    </wd:Report_Entry>
    ...
</wd:Report_Data>

测试粮农组织
testRefID
测试类型
测试公司
测试公司类型
测试粮农组织

testRefID~否。以字符为单位的选项卡大小不是标准的

看起来您的所有数据都是一致的,并且大小没有太大变化,否则不同行的列之间的位置不一致性将与数据和标题之间的不一致性相同

结果的目标用途是什么?它将被解析(需要特定的分隔符和结构)还是打印(应该看起来很漂亮并且有对齐的列)

若你们想让这个文件看起来漂亮,我建议你们使用固定长度的记录文件,它可以通过下面的方法实现

<xsl:template match="/" name="sp-padding">
    <xsl:param name="count">0</xsl:param>
    <xsl:if test="$count > 0">
        <xsl:text>&#160;</xsl:text>
        <xsl:call-template name="sp-padding">
            <xsl:with-param name="count" select="$count - 1"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<xsl:for-each select="nodesToBeConvertedToRow">
    <!-- Col nr:  1 Length: 10-->
    <xsl:call-template name="sp-padding">
        <xsl:with-param name="count" select="10"/>
    </xsl:call-template>
    <!-- Col nr:  2 Length:  3-->
    <xsl:value-of select="nodeWithText"/>
    <xsl:call-template name="sp-padding">
        <xsl:with-param name="count" select="3 - string-length(nodeWithText)"/>
    </xsl:call-template>
    ...
    <xsl:text>&#10;</xsl:text>
</xsl:for-each>

0
 
...



字段数据长度需要小于分配的记录大小,并且存在一些其他限制。虽然所有记录的长度都大于相应的模式字段大小,但它对我的情况有效。

我决定为列标题创建变量,并附加足够的空格,如下所示:

<xsl:variable name="FAO" select="concat('FAO                                               ', '')" />
<xsl:variable name="FAO1" select="concat('FAO REFERENCE ID', '')" />

然后,我在模板中为每个循环显示列标题

然后在循环中,我像前面一样输出值,但我使用列标题的长度,如下所示:

<xsl:value-of select="substring(concat(wd:FAO, '                                                  '), 1, string-length($FAO))" /><xsl:value-of select="$tab"/>
<xsl:value-of select="substring(concat(wd:FAO_REFERENCE_ID, '                                                  '), 1, string-length($FAO1))" /><xsl:value-of select="$tab"/>


这有点难看,但在我找到更好的解决方案之前它会起作用。

您的输入XML无效。标记不匹配(例如,
关闭,需要定义wd名称空间)。@BenL-抱歉,我做了大量的复制和粘贴。现在已修复。