【发布时间】:2020-10-30 07:20:50
【问题描述】:
我知道标题中的错误消息表明我在其中运行 XML 代码的应用程序似乎没有将其识别为 XML。我已经将它与我最近使用的其他编码进行了比较,但找不到问题。然而,一个很大的不同是我同时使用了 XSLT,这可能是原因。我已经包含了 XML 和 XSLT 编码的片段以供参考。
<?xml version="1.0" encoding="UTF-8"?>
<GLPayrollExportConfiguration>
<definitions>
<FileType Value="CSV"/>
<FileName>
<Value Value="GL_Summary_"/>
<Value Value="paygroup_xref"/>
<Value Value="_"/>
<Value Value="payrun_payperiod_and_suffix"/>
<Value Value="_"/>
<Value Value="transaction_timestamp"/>
<Value Value=".csv"/>
</FileName>
<Settings>
<SplitMode Value="HOME_LOCATION_SPLIT"/>
<ChartOfAccountXRefCode Value="GL"/>
<RunOnPayRunCommit Value="True"/>
</Settings>
<Header>
<Text Value="Posting Date,"/>
<Text Value="Document Type,"/>
<Text Value="Account Type,"/>
<Text Value="Account No,"/>
<Text Value="Fund No,"/>
<Text Value="Dimension Speedkey Code,"/>
<Text Value="Dimension 1,"/>
<Text Value="Dimension 2,"/>
<Text Value="Dimension 3,"/>
<Text Value="Dimension 4,"/>
<Text Value="Dimension 5,"/>
<Text Value="Dimension 6,"/>
<Text Value="Dimension 7,"/>
<Text Value="Dimension 8,"/>
<Text Value="External Document No,"/>
<Text Value="Description,"/>
<Text Value="Amount,"/>
</Header>
<Columns>
<Column Name="PostingDate" DataType="datetime" Source="data" Value="payrun_pay_date" Sort="true"/>
<Column Name="ColumnC" DataType="string" Source="mapping"/>
<Column Name="AccountNo" DataType="string" Source="data" Value="payrun_category_override_journal_number"/>
<Column Name="FundNo" DataType="string" Value="UNREST"/>
<Column Name="DimensionSpeedkeyCode" DataType="string" Source="mapping"/>
<Column Name="Description" DataType="string" Source="mapping"/>
<Column Name="Amount" DataType="number" Source="data" Value="payrun_amount" Function="sum" />
</Columns>
</definitions>
<MappingDefinitions>
<definition>
<criteriaset>
<!-- EXCLUDE MEMO DEDUCTIONS AND TAXABLE BENEFITS / JOURNAL NUMBER CODED AS exclude, Exclude, or EXCLUDE -->
<criteria item="payrun_category_override_journal_number" op="ne">EXCLUDE</criteria>
<criteria item="payrun_category_override_journal_number" op="ne">Exclude</criteria>
<criteria item="payrun_category_override_journal_number" op="ne">exclude</criteria>
<!-- EXCLUDE RECORDS WITH with 0 VALUE -->
<criteria item="payrun_amount" op="ne" opDataType="number">0</criteria>
</criteriaset>
<mapping>
<mapto columnname="Col C">
<Value Value="	"/><Value Value="PAYROLL"/>
<Value Value="payrun_pay_date"/>
</mapto>
<mapto columnname="Dimension Speedkey Code">
<Value Value="	"/><Value Value="override_segment_charged_dynamic_org_level_onsitedepartment"/>
<Value Value="override_segment_dynamic_labor_metric_code_CostNumber"/>
</mapto>
<mapto columnname="Description">
<Value Value="	"/><Value Value="payrun_pay_date"/>
<Value Value=" "/><Value Value="payrun_category_name"/>
</mapto>
</mapping>
</definition>
</MappingDefinitions>
<ColumnFormats>
<ColumnFormat Name="PostingDate" Format="MM.dd.yy"/>
<ColumnFormat Name="ColC" Format="YYYYMMDD"/>
<ColumnFormat Name="AccountNo" WrapChar="""/>
<ColumnFormat Name="DimensionSpeedkeyCode" WrapChar="""/>
<ColumnFormat Name="Description" Format="mm.dd.yy" WrapChar="""/>
<ColumnFormat Name="Amount" Format="{0:##.00}"/>
</ColumnFormats>
</GLPayrollExportConfiguration>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:choose>
<xsl:when test="override_segment_dynamic_labor_metric_code_CostNumber=' '">
<xsl:value-of select="override_segment_charged_dynamic_org_level_onsitedepartment"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="override_segment_dynamic_labor_metric_code_CostNumber"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
想法?
【问题讨论】:
-
我用
xsltproc对其进行了测试,它没有抛出错误。但它也不会产生任何输出。 -
在 XML 声明之前不允许有空格,很难判断您输入的 XML 示例中是否只是代码示例的缩进,或者确实是错误消息的原因。
-
Martin,我在 XML 声明之前没有任何空格。我也能够在没有错误的情况下运行该作业。数据库中有我正在运行代码的数据,但我没有得到输出文件,并且确实在作业日志中看到错误消息引用了标题字段中的错误。很奇怪。
-
您的下游应用程序可能会生成错误消息,因为您的 XSLT 代码不会生成任何内容。因此,带有根节点的 XML 格式不正确。
-
那么是否有编写执行 XSLT 转换的代码(例如 Java、C#)?一些 API,至少在 Microsoft 平台上,有两个方法
load和loadXML,人们会混淆它们并将 URI 或文件名传递给loadXML方法,然而,该方法期望 XML 标记作为字符串。这可能会导致这样的错误消息。 Bluewood 也有很好的提示。