How to join node value which have same node name with PHP? My output:
<SHOP>
<SHOPITEM>
<title>BERMUDY FRANKLIN</title>
<text>6skladem 3 kusů</text>
<text>7skladem 8 kusů</text>
<text>22skladem 33 kusů</text>
<unit>0</unit>
</SHOPITEM>
<SHOPITEM>
<title>FRANKLIN 14221</title>
<text>6skladem 3 kusů</text>
<text>7skladem 8 kusů</text>
<unit>0</unit>
</SHOPITEM>
</SHOP>
And i wish this:
<SHOP>
<SHOPITEM>
<title>BERMUDY FRANKLIN</title>
<text>6skladem 3 kusů<br>7skladem 8 kusů<br>22skladem 33 kusů</text>
<unit>0</unit>
</SHOPITEM>
<SHOPITEM>
<title>FRANKLIN 14221</title>
<text>6skladem 3 kusů<br>7skladem 8 kusů</text>
<unit>0</unit>
</SHOPITEM>
</SHOP>
How improve this code which do first block of code? I am totaly lost..thx:
foreach ($items as $item)
{
$pieces = $item->getElementsByTagName("STOREPIECES");
$sizename = $item->getElementsByTagName("SIZENAME");
$sizenamevalue = $sizename->item(0)->nodeValue;
$piecesvalue = $pieces->item(0)->nodeValue;
$query = $xpath->query('DESCRIPTION', $item);
$text = $query->nodeValue .= $sizenamevalue . 'stock ' . $piecesvalue . ' pc';
$node = $dom->createElement("text", "$text");
$item->parentNode->parentNode->appendChild($node);
}
You can use this XSLT template:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/SHOP/SHOPITEM">
<xsl:element name="SHOPITEM">
<title><xsl:value-of select="title" /></title>
<unit><xsl:value-of select="unit" /></unit>
<text>
<xsl:call-template name="join">
<xsl:with-param name="list" select="text" />
</xsl:call-template>
</text>
</xsl:element>
</xsl:template>
<xsl:template name="join">
<xsl:param name="list" />
<xsl:for-each select="$list">
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<br />
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Usage:
$xsl_doc = new DOMDocument;
$xsl_doc->loadXML($xsl);
$xml_doc = new DOMDocument;
$xml_doc->loadXML($xml);
$xslt = new XSLTProcessor();
$xslt->importStyleSheet($xsl_doc);
$new_xml_doc = $xslt->transformToDoc($xml_doc);
echo $new_xml_doc->saveXML();
Depending on how you have the xml string formed (with at the end of each line or not) you can do
xml_string.replace('</text><text>', '<br>');
If you have a between lines it should be
xml_string.replace('</text>
<text>', '<br>');
This maybe isn't the most elegant solution, but it should work easily