Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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转换的CSV文本输出在第三方应用程序中打开时会出现混乱_Xml_Xslt_Xslt 1.0_Visual Studio 2015_Epicorerp - Fatal编程技术网

Xml XSLT转换的CSV文本输出在第三方应用程序中打开时会出现混乱

Xml XSLT转换的CSV文本输出在第三方应用程序中打开时会出现混乱,xml,xslt,xslt-1.0,visual-studio-2015,epicorerp,Xml,Xslt,Xslt 1.0,Visual Studio 2015,Epicorerp,遇到了一点问题 我正在使用VS2015构建将在第三方程序中使用的XSLT。我已经将来自第三方程序(Epicor Service Connect)的示例数据生成为XML,并在此基础上构建了XSLT。现在,当我在VS中调试样式表时,我得到了预期的结果——列在顶部,用分号分隔,然后每个数据块都在下面,正如预期的那样 然而,当我通过Service Connect程序运行它时,我得到了一个完全的谜团: 我需要能够在CSV中使用分号作为分隔符返回数据。我在VS中获得的一小段数据表明这是可行的: 当然,当

遇到了一点问题

我正在使用VS2015构建将在第三方程序中使用的XSLT。我已经将来自第三方程序(Epicor Service Connect)的示例数据生成为XML,并在此基础上构建了XSLT。现在,当我在VS中调试样式表时,我得到了预期的结果——列在顶部,用分号分隔,然后每个数据块都在下面,正如预期的那样

然而,当我通过Service Connect程序运行它时,我得到了一个完全的谜团:

我需要能够在CSV中使用分号作为分隔符返回数据。我在VS中获得的一小段数据表明这是可行的:

当然,当放入CSV时,它会显示正确的信息

任何好奇的人都可以使用XSLT(请注意,这是我使用XSLT的第二天,在此之前,我只知道它是什么的缩写-所以这并不奇怪-但是如果您有改进建议,我很乐意接受建设性的批评):



;
;

;
;
一些样本数据:

服务连接之前(后期格式化):

<QueryResultDataSet>
<Results>
    <Source_-_System>SOURCE SYSTEM 1</Source_-_System>
    <Customer>96247</Customer>
    <Description_-_Short>COMPANY DESCRIPTION SHORT</Description_-_Short>
    <Description_-_Medium>COMPANY DESCRIPTION MEDIUM</Description_-_Medium>
    <Description_-_Long>COMPANY DESCRIPTION LONG</Description_-_Long>
</Results>
<?xml version="1.0" encoding="utf-16"?>
<msg:Msg xsi:schemaLocation="http://Epicor.com/Message/2.0 http://scshost/schemas/epicor/ScalaMessage.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:msg="http://Epicor.com/Message/2.0">
<msg:Hdr>
    <msg:Ctrl>
        <msg:MsgID></msg:MsgID>
    </msg:Ctrl>
    <msg:Sender>
        <msg:Name></msg:Name>
        <msg:Subname></msg:Subname>
    </msg:Sender>
    <msg:Logon></msg:Logon>
</msg:Hdr>
<msg:Body>
    <msg:Req msg-type="DocumentToProcess" action="MapAndProcess">
        <msg:Dta>
            <ext_UserSchema:QueryResultDataSet xmlns:msg="http://Epicor.com/InternalMessage/1.1" xmlns:ext_UserSchema="http://Epicor.com/SC/UserSchema">
                <ext_UserSchema:Results>
                    <ext_UserSchema:Source_System>SOURCE_SYS1</ext_UserSchema:Source_System>
                    <ext_UserSchema:Vendor>96247</ext_UserSchema:Vendor>
                    <ext_UserSchema:Description_-_Short>COMPANY DESCRIPTION SHORT</ext_UserSchema:Description_-_Short>
                    <ext_UserSchema:Description_-_Medium>COMPANY DESCRIPTION MEDIUM</ext_UserSchema:Description_-_Medium>
                    <ext_UserSchema:Description_-_Long>COMPANY DESCRIPTION LONG</ext_UserSchema:Description_-_Long>
                </ext_UserSchema:Results>
            </ext_UserSchema:QueryResultDataSet>
        </msg:Dta>
    </msg:Req>
</msg:Body>
</msg:Msg>

源系统1
96247
公司简介
公司描述媒体
公司简介长

售后服务连接:

<QueryResultDataSet>
<Results>
    <Source_-_System>SOURCE SYSTEM 1</Source_-_System>
    <Customer>96247</Customer>
    <Description_-_Short>COMPANY DESCRIPTION SHORT</Description_-_Short>
    <Description_-_Medium>COMPANY DESCRIPTION MEDIUM</Description_-_Medium>
    <Description_-_Long>COMPANY DESCRIPTION LONG</Description_-_Long>
</Results>
<?xml version="1.0" encoding="utf-16"?>
<msg:Msg xsi:schemaLocation="http://Epicor.com/Message/2.0 http://scshost/schemas/epicor/ScalaMessage.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:msg="http://Epicor.com/Message/2.0">
<msg:Hdr>
    <msg:Ctrl>
        <msg:MsgID></msg:MsgID>
    </msg:Ctrl>
    <msg:Sender>
        <msg:Name></msg:Name>
        <msg:Subname></msg:Subname>
    </msg:Sender>
    <msg:Logon></msg:Logon>
</msg:Hdr>
<msg:Body>
    <msg:Req msg-type="DocumentToProcess" action="MapAndProcess">
        <msg:Dta>
            <ext_UserSchema:QueryResultDataSet xmlns:msg="http://Epicor.com/InternalMessage/1.1" xmlns:ext_UserSchema="http://Epicor.com/SC/UserSchema">
                <ext_UserSchema:Results>
                    <ext_UserSchema:Source_System>SOURCE_SYS1</ext_UserSchema:Source_System>
                    <ext_UserSchema:Vendor>96247</ext_UserSchema:Vendor>
                    <ext_UserSchema:Description_-_Short>COMPANY DESCRIPTION SHORT</ext_UserSchema:Description_-_Short>
                    <ext_UserSchema:Description_-_Medium>COMPANY DESCRIPTION MEDIUM</ext_UserSchema:Description_-_Medium>
                    <ext_UserSchema:Description_-_Long>COMPANY DESCRIPTION LONG</ext_UserSchema:Description_-_Long>
                </ext_UserSchema:Results>
            </ext_UserSchema:QueryResultDataSet>
        </msg:Dta>
    </msg:Req>
</msg:Body>
</msg:Msg>

来源(系统1)
96247
公司简介
公司描述媒体
公司简介长

有人知道是什么导致了这个问题吗?

我很惊讶我之前没有发现这个问题:

您的渲染出错,因为出现了错误!第一个字符是以Unicode或of表示的,第二个字符是使用UTF-16(顺序取决于endianness)或使用UTF-8并应用UTF-8解码(字节为0xEF、0xBB、0xBF)时字节顺序标记中的第一个和第二个字节

简而言之,要解决这个问题,请将
xsl:output
更改为包含:

<xsl:output byte-order-mark="no" />

但这只适用于XSLT2.0或更高版本。如果无法切换到XSLT2.0,则应检查处理器的文档,看它是否支持不带字节顺序标记的UTF-8编码

至少在某些情况下,当使用UTF-8的文本输出时。此外,在Windows上,记事本和许多其他编辑器在保存文件时会自动发出字节顺序标记(例如,如果您手动对CSV进行后期编辑,可能会发生这种情况)

要解决此问题,请执行以下操作之一:

  • 使用任何处理器切换到XSLT 2.0
  • 对输出进行后期处理以删除字节顺序标记
  • 如果第三方软件有删除或忽略字节顺序标记的选项,请查看其文档
  • 使用不输出字节顺序标记的其他编码

我可以帮助您使用XSLT,但这需要更多的输入:您知道输出中实际需要的更改是什么,以使其与Service Connect一起工作吗?或者,您可以手动创建一个示例,该示例将与Service Connect一起使用,而另一个示例显然不能使用?另外,一个(最小的)输入数据XML示例将非常受欢迎。顺便说一句,从截图上看,我的第一个猜测是存在编码问题。也就是说,样式表将创建UTF-8,但如果您创建了CSV,那么Service Connect的预期格式可能是ISO-8859-1,或者作为最后手段尝试使用US-ASCII(您可以在
xsl:output
中设置)。您确定CSV必须用
分隔吗?典型的CSV带有
(C代表逗号,而不是分号;)。嗨@Abel,谢谢你回复我。对于输出CSV列,我们要求标题中的下划线(u)被去除并替换为空格()。我将编辑这个问题,并提供我正在使用的两个样本数据集,以实现上述结果。我会给编码一个镜头-这是一个很好的点,很可能是真的。对于用分号分隔的CSV,我们已使默认语言格式以分号作为分隔符,因为值可能包含逗号,但不包含分号。提供了示例数据的一小部分。我现在将测试不同的编码类型。好的,我将等待您的更新(我很快就会离开,但明天会看到,或者其他人会看到)。关于您在两天后的XSLT技能,我印象深刻,您取得了非常好的进步,似乎理解了模板、模式、名称空间、焦点、上下文节点、位置和模式,因此您必须阅读了优秀的参考资料或是一位优秀的教师。竖起大拇指!很好的建议,还有一个。抱歉@Abel,我过去几天都没上班。我现在就试试这个,然后再回复你:)谢谢你的帮助!我做了一个梦。非常感谢你的帮助,亚伯!:)