如何使用PHP加入具有相同节点名的节点值? 我的输出:
<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>
我希望如此:
<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>
如何改进这个第一块代码的代码?我完全失去了...... 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);
}
答案 0 :(得分:1)
您可以使用此XSLT模板:
<?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>
用法:
$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();
答案 1 :(得分:-1)
取决于你如何形成xml字符串(在每一行的末尾是\ n)你可以做
xml_string.replace('</text><text>', '<br>');
如果行之间有\ n,则应为
xml_string.replace('</text>\n<text>', '<br>');
这可能不是最优雅的解决方案,但它应该可以轻松实现