douna3367 2014-12-22 03:01
浏览 72
已采纳

使用PHP连接具有相同节点名的节点值

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);
}
  • 写回答

2条回答 默认 最新

  • duanpei8518 2014-12-22 03:34
    关注

    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();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)