我可以将XSLT转换为XML吗?

时间:2016-12-07 14:14:41

标签: xml xslt transformation

在我最近的项目中,我遇到需要将XSLt转换为XML的情况 - 我可以这样做吗?这怎么可能?

1 个答案:

答案 0 :(得分:0)

XSLT(可扩展样式表语言转换) XML(可扩展标记语言),它用于将其他XML转换为基本上任何类型的文本,通常是更多的XML。

大多数情况下,xml文档中的某些数据是通过使用xslt文档应用转换来生成输出来转换的。

例如;可以在xml数据文件中包含适合于计算机软件使用的书籍列表,以及能够将该书籍列表转换为更适合人类的html(或xhtml或...)文档的xslt样式表消耗。

这里有一些与xslt一起使用的示例代码,用于衡量标准:

#!/usr/bin/php -q
<?php

namespace XSLTProcessorTool
{
    use DOMDocument;
    use XSLTProcessor;

    /**
     * Class Processor: Process an xml file according to a stylesheet
     */
    class Program
    {
        static function main(array $args)
        {
            if(count($args) >= 3)
            {

                /** @noinspection PhpUnusedLocalVariableInspection Intentionally ignoring the first element here */
                $programFile = array_shift($args);
                $xmlFile = array_shift($args);
                $xslFile = array_shift($args);

                $xml = new DOMDocument();
                if (false != ($xml->load($xmlFile)))
                {
                    $xsl = new DOMDocument();
                    if (false != ($xsl->load($xslFile)))
                    {
                        $transformer = new XSLTProcessor();
                        $transformer->importStylesheet($xsl);
                        $result = $transformer->transformToXml($xml);

                        fputs(STDOUT, $result);
                    }
                    else
                    {
                        self::reportFatalError(sprintf('Unable to read XSL from %s', $xslFile));
                    }

                }
                else
                {
                    self::reportFatalError(sprintf('Unable to read XML from %s', $xmlFile));
                }
            }
            else
            {
                self::reportFatalError('Need at 2 parameters representing an xml file and the xsl sheet to transform it with.');
            }
        }

        /**
         * Log an error message and exit.
         * 
         * @param $message
         */
        private static function reportFatalError($message)
        {
            fputs(STDERR, $message);
            die(1);
        }
    }

    // usage: php -q xslt.php data.xml stylesheet.xslt > output.xml

    /** @var $argv array containing commandline arguments */
    Program::main($argv);
}

#EOF

这是一个带有两个参数的命令行工具; xml数据文件的路径和xslt文件的路径。输出被转储到stdout(从它启动的控制台,或重定向到文件等)。