2016-07-29 31 views
0

我有下面的XML:獲取自定義的XML的子元素屬性

<?xml version="1.0" encoding="UTF-8"?> 
<Entries> 
<Category name="Gallery Wrap"> 
<Entry> 
    <Status>Active</Status> 
    <ProductId>12x18_12framewrapwalnut</ProductId> 
    <Size> 
    <Height>12</Height> 
    <Width>18</Width> 
    <Depth>12</Depth> 
    </Size> 
    <Options> 
    <Frame cost="86" id="12x18_12framewrapwalnut">Canvas</Frame> 
    </Options> 
    <Description>12x18 Walnut Framed Gallery Wrap</Description> 
    <Weight>.1</Weight> 
</Entry> 
.... 
</Category> 
</Entries> 

我試圖讓該元素的自定義屬性。這是到目前爲止,我的PHP代碼:

$products = simplexml_load_file('product_list.xml'); 

foreach ($products as $category) { 
    $attributes = $category->attributes(); 
    echo '<h2>' . $attributes['name'] . '</h2>'; 

    echo '<table>'; 
    echo '<tr><th></th><th>Name</th><th>Your Cost</th><th>Set Price</th></tr>'; 

    foreach ($category->Entry as $product) { 
     foreach ($product->Options as $option) { 
      $option_attributes = $option->attributes(); 
      $option_vars = get_object_vars($option); 
      foreach ($option_vars as $option_name => $option_value) { 
       echo '<tr><td><input type="checkbox" value="' . $option_attributes->id . '" /></td><td>' . $product->Description . ' - ' . $option_name . '</td><td>' . $option_attributes->cost . '</td><td><input type="text" size="5" value="' . $option_attributes->cost . '" data-cost="' . $option_attributes->cost . '" class="price" /></td></tr>'; 
      } 
     } 
    } 
    echo '</table>'; 
} 

我建立一個形式,這需要他們要包括哪些產品XML數據讓我們的用戶,制定自己的價格(所有這方面我可以處理之後,就可以提取「成本」和「ID」屬性)。

+0

是一個文件或字符串,反正你會想,除非你就像使用它 –

+0

是您的XML切斷使用SimpleXML的?費用在哪裏?請包含一個更完整的版本以供再現。 – Parfait

+0

我用simplexml_load_file()添加了行,很抱歉讓它關閉。 XML的其餘部分只是更多元素而且是完全冗餘的。 「成本」(在這個例子中它是「86」)在元素以及「id」 – sccr410

回答

0

考慮將XML源代碼轉換爲HTML的XSLT解決方案。在這裏,你避免任何foreach循環。下面將XSLT作爲嵌入字符串運行,但也可以像其他格式良好的XML文件一樣從文件加載。請務必在php .ini文件中啓用XSLT擴展:extension=php_xsl.dll/php_xsl.so

// Load XML source 
$xml = new DOMDocument('1.0', 'UTF-8'); 
$xml->formatOutput = true; 
$xml->preserveWhiteSpace = false; 
$xml->load('Input.xml'); 

// Load XSLT string 
$xsl = new DOMDocument; 
$xslstr = '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" 
         omit-xml-declaration="yes"/> 

      <xsl:template match="Entries"> 
       <html> 
        <xsl:apply-templates select="Category"/> 
       </html> 
      </xsl:template> 

      <xsl:template match="Category"> 
       <h2><xsl:value-of select="@name"/></h2> 
       <table> 
        <tr><th></th><th>Name</th><th>Description</th><th>Set-Price</th></tr> 
        <tr><xsl:apply-templates select="Entry"/></tr> 
       </table> 
      </xsl:template> 

      <xsl:template match="Entry">     
       <td><input type="checkbox"> 
        <xsl:attribute name="value"><xsl:value-of select="Options/Frame/@id"/></xsl:attribute> 
       </input></td> 
       <td><xsl:value-of select="Description"/>-<xsl:value-of select="ancestor::Category/@name"/></td> 
       <td><xsl:value-of select="Options/Frame/@cost"/></td> 
       <td> 
        <input type="text" size="5"> 
         <xsl:attribute name="value"><xsl:value-of select="Options/Frame/@cost"/></xsl:attribute> 
         <xsl:attribute name="data-cost"><xsl:value-of select="Options/Frame/@cost"/></xsl:attribute> 
         <xsl:attribute name="class">price</xsl:attribute> 
        </input> 
       </td>    

      </xsl:template> 

      </xsl:stylesheet>'; 
$xsl->loadXML($xslstr); 

// Configure the transformer 
$proc = new XSLTProcessor; 
$proc->importStyleSheet($xsl); 

// Transform XML source 
$newXml = $proc->transformToXML($xml); 
echo $newXml;         // STRING VALUE 

輸出

<html> 
    <h2>Gallery Wrap</h2> 
    <table> 
    <tr> 
     <th/> 
     <th>Name</th> 
     <th>Your Cost</th> 
     <th>Set-Price</th> 
    </tr> 
    <tr> 
     <td> 
     <input type="checkbox" value="12x18_12framewrapwalnut"/> 
     </td> 
     <td>12x18 Walnut Framed Gallery Wrap-Gallery Wrap</td> 
     <td>86</td> 
     <td> 
     <input type="text" size="5" value="86" data-cost="86" class="price"/> 
     </td> 
    </tr> 
    </table> 
</html> 

HTML Output from PHP Script

相關問題