Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 从csv的第一行定义全局变量_Xml_Variables_Xslt_Csv_Xslt 2.0 - Fatal编程技术网

Xml 从csv的第一行定义全局变量

Xml 从csv的第一行定义全局变量,xml,variables,xslt,csv,xslt-2.0,Xml,Variables,Xslt,Csv,Xslt 2.0,我有一个xslt文件,它将csv文件转换为xml。 这是我的xslt: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:variable name="invoice_date" select="tokenize(., ',')[3]"/> &l

我有一个xslt文件,它将csv文件转换为xml。 这是我的xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="invoice_date" select="tokenize(., ',')[3]"/>
    <xsl:template match="/">
        <transactions>
            <payee_transactions>
                <xsl:for-each select="tokenize(.,'\r?\n')">
                    <!-- DETERMINE THE LINE -->
                    <xsl:variable name="line" select="tokenize(., ',')"/>
                    <xsl:if test="$line[1]='$$$'">
                        <xsl:variable name="batch_date" select="$line[3]"/>
                        <xsl:variable name="batch_count" select="$line[4]"/>
                        <xsl:variable name="batch_amount" select="$line[5]"/>
                        <batch_date><xsl:sequence select="normalize-space($batch_date)"/></batch_date>
                        <batch_count><xsl:sequence select="normalize-space($batch_count)"/></batch_count>
                        <batch_amount><xsl:sequence select="normalize-space($batch_amount)"/></batch_amount>
                        <batch_description><xsl:sequence select="normalize-space($batch_reference)"/> - Payees</batch_description>
                    </xsl:if>
                    <xsl:if test="$line[1]='PAY'">
                        <payee_transaction>
                            <xsl:variable name="payee_name" select="$line[2]"/>
                            <xsl:variable name="addr1" select="$line[4]"/>
                            <payee_name><xsl:value-of select="normalize-space($payee_name)"/></payee_name>
                            <payee_id><xsl:value-of select="normalize-space($source_system_id)"/></payee_id>
                            <payee_address_line1><xsl:value-of select="normalize-space($addr1)"/></payee_address_line1>
                            <amount><xsl:value-of select="normalize-space($amount)"/></amount>
                            <line_memo><xsl:value-of select="normalize-space($line_memo)"/></line_memo>
                            <invoice_date><xsl:value-of select="$batch_date"/></invoice_date>
                        </payee_transaction>
                    </xsl:if>
                </xsl:for-each>             
            </payee_transactions>
        </transactions>
    </xsl:template>
</xsl:stylesheet>

-受款人
我的主要问题是,当我试图在第二条if语句中使用
batch\u date
变量时,我遇到了一个编译器错误

我希望每个记录都有一个与批处理日期相同的
发票日期

我研究了全局变量,但我遇到了来自人们的相同消息,一个全局变量不能在模板中重新分配,一个新变量被创建,具有相同的名称。 所以,我想创建一个全局变量,并在我点击模板之前给它赋值,所以我总是有它

我需要它从csv文件的第一行抓取第三个元素。 我写的东西不起作用


如何执行此操作?

使用此示例csv文件(Book1.csv


a、 b,c
d、 e,f
g、 哦,我
这个样式表呢

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output omit-xml-declaration="yes"/>

   <xsl:variable name="batch_date">
       <xsl:for-each select="tokenize(document('Book1.csv'), '\r?\n')[2]">
           <xsl:for-each select="tokenize(.,',')[3]">
               <xsl:value-of select="."></xsl:value-of>
           </xsl:for-each>
       </xsl:for-each>
   </xsl:variable>

    <xsl:template match="/">
        <variable>
            <xsl:value-of select="$batch_date"/>
        </variable>
    </xsl:template>
</xsl:stylesheet>

输出是

<variable>c</variable>
c

查看是否可以将其调整到当前的问题。

目前未设置
发票日期
变量的范围,因为它位于任何模板之外,这是“全局”变量的最佳位置

<xsl:variable name="invoice_date" select="tokenize(., ',')[3]"/>

什么是编译器错误?在您的变量中,您认为在该点分配给句点的范围是什么?您尝试过在那里使用
/
吗?@legostrmtroopr-我得到的错误是:
变量批处理日期尚未声明
@jasonaler-我认为全局发票数据变量声明中的期间将引用输入文档。即使它引用了整个文档,第三个元素仍然是发票日期。我现在正在使用斜杠进行测试。@jasonaler-使用斜杠有效。如果你把你的评论变成一个答案,我会选择它。谢谢,这不是从每一行而不是从第一行开始的过程吗?
<xsl:variable name="invoice_date" select="tokenize(., ',')[3]"/>
<xsl:variable name="invoice_date" select="tokenize(/, ',')[3]"/>