شينكلود لم يتم تقييمها في التحول زسلت باستخدام فب
سؤال
أحاول تضمين ملفات مصدر مختلفة (على سبيل المثال.ملف1.شمل وملف2.شمل) ولها هذه تشمل حل لتحويل زسلت باستخدام فبس XSLTProcessor
.هذا هو مدخلاتي:
المصدر.شمل
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file1.xml" />
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file2.xml" />
</root>
تحويل.شسل
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:transform>
تحويل.بي إتش بي
<?php
function transform($xml, $xsl) {
global $debug;
// XSLT Stylesheet laden
$xslDom = new DOMDocument("1.0", "utf-8");
$xslDom->load($xsl, LIBXML_XINCLUDE);
// XML laden
$xmlDom = new DOMDocument("1.0", "utf-8");
$xmlDom->loadHTML($xml); // loadHTML to handle possibly defective markup
$xsl = new XsltProcessor(); // create XSLT processor
$xsl->importStylesheet($xslDom); // load stylesheet
return $xsl->transformToXML($xmlDom); // transformation returns XML
}
exit(transform("source.xml", "transform.xsl"));
?>
الناتج المطلوب هو
<?xml version="1.0" encoding="utf-8" ?>
<root>
<!-- transformed contents of file1.xml -->
<!-- transformed contents of file2.xml -->
</root>
الإخراج الحالي الخاص بي هو نسخة طبق الأصل من ملف المصدر الخاص بي:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file1.xml" />
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file2.xml" />
</root>
المحلول
اتضح، لقد نسيت فقط سطر واحد بسيط ولكنه مهم في رمز فب الخاص بي.كان علي أن أتصل DOMDocument::xinclude
أن يكون يتضمن حلها قبل أن يتم التحول.
المثال الكامل:
<?php
function transform($xml, $xsl) {
global $debug;
// XSLT Stylesheet laden
$xslDom = new DOMDocument("1.0", "utf-8");
$xslDom->load($xsl, LIBXML_XINCLUDE);
// XML laden
$xmlDom = new DOMDocument("1.0", "utf-8");
$xmlDom->load($xml);
$xmlDom->xinclude(); // IMPORTANT!
$xsl = new XsltProcessor();
$xsl->importStylesheet($xslDom);
return $xsl->transformToXML($xmlDom);
}
exit(transform("source.xml", "transform.xsl"));
?>
لا تنتمي إلى StackOverflow