“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错
Posted
技术标签:
【中文标题】“无法识别的类型\'员工\'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错【英文标题】:"Unrecognized type 'employees'. Ignored. C:/....." error when reading input from .xml and writing the output to .xls file + perl“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错 【发布时间】:2021-10-01 14:57:21 【问题描述】:我的 .xml 文件有父元素“员工”。只是我需要将内容提取到“.xls”文件中。为什么会出现此错误:
Unrecognized type 'employees'. Ignored.
at C:/Strawberry/perl/site/lib/Spreadsheet/WriteExcel/FromXML.pm line 325.
感谢任何帮助。
我的我/p:
<employees>
<employee>
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
</employee>
<employee>
<name>Jane Doe</name>
<age>31</age>
<sex>F</sex>
<department>Accounts</department>
</employee>
<employee>
<name>Be Goode</name>
<age>32</age>
<sex>M</sex>
<department>Human Resources</department>
</employee>
</employees>
我的代码:
use strict;
use warnings;
use Spreadsheet::WriteExcel::FromXML;
Spreadsheet::WriteExcel::FromXML->XMLToXLS("emp.xml", "final.xls");
O/p:
Unrecognized type 'employees'. Ignored.
at C:/Strawberry/perl/site/lib/Spreadsheet/WriteExcel/FromXML.pm line 325.
Spreadsheet::WriteExcel::FromXML::_processTree(Spreadsheet::WriteExcel::FromXML=HASH(0xea9ad0), ARRAY(0x31da080), "employees", SCALAR(0x31d8de8), SCALAR(0x31d8e00)) called at C:/Strawberry/perl/site/lib/Spreadsheet/WriteExcel/FromXML.pm line 186
Spreadsheet::WriteExcel::FromXML::parse(Spreadsheet::WriteExcel::FromXML=HASH(0xea9ad0)) called at C:/Strawberry/perl/site/lib/Spreadsheet/WriteExcel/FromXML.pm line 79
谁能告诉我,为什么会出现这个错误? (或)从 .xml 提取到的任何其他方法 .xls 表?提前致谢。
【问题讨论】:
看source好像这个模块只能识别标签workbook
、worksheet
、row
、cell
、format
、range
和@987654332 @。其他任何事情都被视为错误
你(或)任何人都可以向我推荐任何其他用于此提取的模块吗?
无论您要使用哪个模块,您都必须指定一些规则如何将您的数据转换为表格形式。您可以使用XML::XSLT
生成Spreadsheet::WriteExcel::FromXML
要求的结构。
【参考方案1】:
您的输入数据可以使用此 XSLT 模板转换为 Spreadsheet::WriteExcel::FromXML
接受的形式:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/employees">
<workbook>
<worksheet title="employees">
<xsl:apply-templates/>
</worksheet>
</workbook>
</xsl:template>
<xsl:template match="/employees/employee">
<row>
<xsl:apply-templates/>
</row>
</xsl:template>
<xsl:template match="/employees/employee/*">
<cell>
<xsl:apply-templates/>
</cell>
</xsl:template>
</xsl:stylesheet>
导致:
<?xml version="1.0"?>
<workbook><worksheet title="employees">
<row>
<cell>John Doe</cell>
<cell>43</cell>
<cell>M</cell>
<cell>Operations</cell>
</row>
<row>
<cell>Jane Doe</cell>
<cell>31</cell>
<cell>F</cell>
<cell>Accounts</cell>
</row>
<row>
<cell>Be Goode</cell>
<cell>32</cell>
<cell>M</cell>
<cell>Human Resources</cell>
</row>
</worksheet></workbook>
【讨论】:
不使用XSLT有没有其他方法? TIMTOWTDI。您可以将您的 xml 数据转换为例如csv,然后转换成xls。在任何情况下,您都需要一个关于如何解释数据的规范——尽管可能有一些“魔法”模块试图猜测。我希望其他解决方案看起来相似。以上是关于“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错的主要内容,如果未能解决你的问题,请参考以下文章