При использовании PERL и выполнении XSLT-преобразования в XML-документе я хочу знать номер строки, которая вызывает ошибки в XML-документе.
У меня есть код, который я использую ниже, и он работает нормальноно номера строк не печатаются.
use strict;
use XML::LibXSLT;
use XML::LibXML;
my $xslt = XML::LibXSLT->new(warnings => 1);
my $source = XML::LibXML->load_xml(location => 'example.xml', XML_LIBXML_LINENUMBERS => 1 );
my $style_doc = XML::LibXML->load_xml(location =>'example.xsl', XML_LIBXML_LINENUMBERS => 1 );
my $stylesheet = $xslt->parse_stylesheet($style_doc);
my $results = $stylesheet->transform($source);
my @messages = $stylesheet->output_as_bytes($results);
foreach my $message (@messages) {
print "\n$message\n";
}
Example.xml
<ROOT xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source>
<RequestorID ID="50000">
<CompanyName />
</RequestorID>
</Source>
</POS>
</ROOT>
Example.xsl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:SHS="http://www.opentravel.org/OTA/2003/05" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="/" mode="M0"/>
</xsl:template>
<xsl:template match="SHS:ROOT/SHS:POS/SHS:Source/SHS:RequestorID" priority="4000" mode="M0">
<xsl:if test="@ID">In pattern 10000: This is the ID="<xsl:value-of select="@ID"/>" </xsl:if>
<xsl:apply-templates mode="M0"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M0"/>
</xsl:stylesheet>
После запуска приведенного выше кода PERL я ожидаю, что номер строки будет напечатан в конце сообщения.