“无法识别的类型'员工'。忽略。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好像这个模块只能识别标签workbookworksheetrowcellformatrange和@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时出错的主要内容,如果未能解决你的问题,请参考以下文章