Используя PERL, как мне напечатать номера строк во время XSLT-преобразования? - PullRequest
0 голосов
/ 20 мая 2019

При использовании 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 я ожидаю, что номер строки будет напечатан в конце сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...