使用列号和行号创建错误日志

时间:2012-10-31 07:28:04

标签: perl

我需要错误日志:我正在对xml文件进行标记验证和DTD验证。

XML:

    <?xml version="1.0"?>
 <purchaseOrder orderDate="1999-10-20">
    <shipTo country="US">
       <name>Alice Smith</name>
       <street>123 Maple Street</street>
       <city>Mill Valley</city>
       <state>CA</state>
       <zip>90952</zip>
    </shipTo>
     <billTo country="US">
        <name>Robert Smith</name>
        <street>8 Oak Avenue</street>
        <city>Old Town</city>
        <state>PA</state>
        <zip>95819</zip>
     </billTo>
     <comment>Hurry, my lawn is going wild<!/comment>
     <items>
        <item partNum="872-AA">
           <productName>Lawnmower</productName>
           <quantity>1</quantity>
           <USPrice>148.95</USPrice>
           <comment>Confirm this is electric</comment>
        </item>
        <item partNum="926-AA">
           <productName>Baby Monitor</productName>
           <quantity>1</quantity>
           <USPrice>39.98</USPrice>
           <shipDate>1999-05-21</shipDate>
        </item>
     </items>
  </purchaseOrder>

脚本:

    use XML::LibXML;
my $parser = XML::LibXML->new;
$parser->validation(1);
$parser->parse_file("purchase.xml");

我得到了不正确的日志,我需要

error.log中: purchase.xml:行号:列号:错误文本

1 个答案:

答案 0 :(得分:0)

您未能提供“不正确的日志”的输出。

使用Try::Tiny来捕获验证错误并将其解析为您首选的格式。

use XML::LibXML;
use Try::Tiny;
my $parser = XML::LibXML->new;
$parser->validation(1);

try {
    $parser->parse_file("purchase.xml");
} catch {
    warn "XML parsing found errors: $_";
    parse_xml_error($_);
};

sub parse_xml_error {
    my $errors = shift;
    # ... left as en exercise for the reader
}