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条)

报告相同问题?

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗