2017-12-04 8 views
0

phpunitを使用してフィクスチャを使用してデータをロードしていますが、今のシナリオではテーブルにxmlデータのみを受け入れるカラムがありますが、フィクスチャファイル内のviaフィールド。私が試してみました何フィクスチャxmlファイル(phpunit)にxmlフィールドをロードする

は:

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<database name="phpunit"> 
    <table_data name="testtable"> 
     <row> 
      <field name="name">My Test</field> 
      <field name="active">1</field> 
      <field name="xml_order"> 
       <Attributes> 
        <Attribute>     
         <Option Value="A">A1</Option> 
         <Option Value="B">B1</Option> 
         <Option Value="C">C1</Option>        
        </Attribute> 
       </Attributes> 
      </field> 
     </row> 
    </table_data> 
</database> 

私はDBにフィールド "xml_order" データをロードすることができません。解決策を探してみましたが、できませんでした。誰もがこれで私を助けることができますか?私は私のテストファイルにこのXMLだけではないし、それをロードする

+0

あなたは明確でした「...私はXMLデータのみを受け入れ、私のテーブルの列を持っている...」、してください?特定の種類の[xml-db](https://en.wikipedia.org/wiki/XML_database)を使用していますか? – xmike

+0

@xmike私の言うことは申し訳ありませんでしたが、列はテキストフィールドであり、xmlデータのみをその列に格納する必要があります –

答えて

1

<Attributes/>は、XMLフィクスチャファイルの正規XMLはDbUnitを、それを読み込む際に、あるので、それない

// a bit simplified 
// please visit https://github.com/sebastianbergmann/dbunit/blob/master/src/DataSet/MysqlXmlDataSet.php to get more details 
$column = $rowElement->xpath('./field[@name="' . $columnName . '"]'); 
$columnValue = (string) $column; 

と、それは、テキスト値があるのです空白文字の文字列。実際には、これは本質的にxmlにとってちょうど普通です。あなたはCDATAあなたが値抽出時に文字列として扱われることを望むすべてのXMLものでラップすることができ、これを克服するために:

<field name="xml_order"> 
    <![CDATA[ 
     <Attributes> 
      <Attribute>     
       <Option Value="A">A1</Option> 
       <Option Value="B">B1</Option> 
       <Option Value="C">C1</Option>        
      </Attribute> 
     </Attributes> 
    ]]> 
</field> 

も実際の文字列はまだ前後にスペースや改行のかなりの束を持つことになりますのでご注意ください実際のxml文字列。私は、これはあなたが行うかもしれないいくつかの理由で指名手配されていません。

<field name="xml_order"><![CDATA[<Attributes> 
    <Attribute>     
     <Option Value="A">A1</Option> 
     <Option Value="B">B1</Option> 
     <Option Value="C">C1</Option>        
    </Attribute> 
</Attributes>]]></field> 

はいえ、見栄えしませんが、前または後に、あなたにはスペースを与えないだろう。あなたがarray based datasetを使用して検討するかもしれない別の方法として

// or it could be \PHPUnit_Extensions_Database_DataSet_ArrayDataSet 
// depending on the dbunit version you use 
return new PHPUnit\DbUnit\DataSet\ArrayDataSet([ 
    'testtable' => [ 
     ["name" => "MyTest", "active" => 1, "xml_order" => '<what><ever>xml</ever></what>'], 
    ] 
]); 
関連する問題