Domdocument: Почему вывод преобразования XSLT стал однострочным? - PullRequest
0 голосов
/ 06 августа 2020

Привет, я хотел знать, как продавать структуру xml при использовании XSLT,

У меня есть этот код ниже,

        /* XSLT File */
        $xsl = new \DOMDocument;
        $xsl->loadXML($xsltData[0]->xslt_template);
        $xsl->preserveWhiteSpace = false;
        $xsl->formatOutput = true;
        /* Combine and Transform XML and XSLT */
        $proc = new \XSLTProcessor;
        $proc->importStyleSheet($xsl); 
        $proc->preserveWhiteSpace = false;
        $proc->formatOutput = true;
        $transformedOutPut = $proc->transformToXML($xml);

Вот мой ввод xml

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <titleA style="test" size="123">Kevin del </titleA>
    <address>1119 Johnson Street, San Diego, California</address>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>

и вот мой XSLT из базы данных с сохранением интервала,

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <catalognew>
    <container-title>My Data</container-title>
    <xsl:for-each select="catalog/cd">
    <cdnew>
      <titlenew><xsl:value-of select="titleA"/></titlenew>
      <addressnew>
        <street><xsl:value-of select="address/street"/></street>
        <city><xsl:value-of select="address/city"/></city>
        <state><xsl:value-of select="address/state"/></state>
      </addressnew>
    </cdnew>
    </xsl:for-each>
  </catalognew>
</xsl:template>
</xsl:stylesheet>

Почему он дает мне однострочный результат и не сохраняет свою исходную структуру,

<?xml version="1.0"?>
<catalognew><container-title>My Data</container-title><cdnew><titlenew>Kevin del </titlenew><addressnew><street>1119 JOHNSON STREET</street><city>SAN DIEGO</city><state>CALIFORNIA</state></addressnew></cdnew></catalognew>

Надеюсь, кто-то может мне помочь,

Спасибо,

1 Ответ

3 голосов
/ 06 августа 2020

Проблема, похоже, в том, что вам нужно убедиться, что конечный объект документа имеет настройки для форматирования вывода. Таким образом, вместо использования transformToXML($xml), это создает новый документ и гарантирует, что этот новый документ имеет параметры форматирования, установленные перед выводом результата ...

$transformedOutPut = $proc->transformToDoc($xml);
$transformedOutPut->preserveWhiteSpace = true;
$transformedOutPut->formatOutput = true;

print_r($transformedOutPut->saveXML());

дает ...

<?xml version="1.0"?>
<catalognew>
  <container-title>My Data</container-title>
  <cdnew>
    <titlenew>Kevin del </titlenew>
    <addressnew>
      <street/>
      <city/>
      <state/>
    </addressnew>
  </cdnew>
</catalognew>
...