1

私はxmlファイルを解析し、アイテムを異なる順序で印刷し、その間に他のテキストを印刷しようとしています。xmlファイルはこのようなものです

<list>
    <item>
    <price>200</price>
    <title>Title1</title>
    <description>something here</description>   
    </item>

    <item>
    <price>350</price>
    <title>Title2</title>
    <description>something there</description>  
    </item>
</list>

出力を2つの異なる行とまったく同じにしたい:

"Title1","something here","","200","1",""
"Title2","something there","","350","1",""

引用符とコンマを見ることが重要です。

私はこれを使用していますが、十分ではありません。私は次に何をすべきかわからない...

<?php
//Initialize the XML parser
$parser=xml_parser_create();

//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "PRICE":
    echo "&#34;";
    break;
    case "TITLE":
    echo "&#34;";
    break;
    case "DESCRIPTION":
    echo "&#34;";
    }
  }

//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "&#34;,";
  }

//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }

//Specify element handler
xml_set_element_handler($parser,"start","stop");

//Specify data handler
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("shopmania_ro.xml","r");

//Read data
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) or
  die (sprintf("XML Error: %s at line %d",
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }

//Free the XML parser
xml_parser_free($parser);
?>

前もって感謝します。

別のコードがあります

 <?php
$xfile = "file.xml";
$xparser=xml_parser_create();
xml_set_character_data_handler($xparser, "cdataHandler");

if(!($fp=fopen($xfile,"r")))
{
die ("File does not exist");
}

while($data=fread($fp, 4096))
{
if(!xml_parse($xparser,$data,feof($fp)))
{
die("XML parse error: xml_error_string(xml_get_error_code($xparser))");
}
}

xml_parser_free($xml_parser);

function cdataHandler($xparser, $cdata)
{
echo "$cdata";
}
 ?>

そして出力は

200 Title1 something here 350 Title2 something there

データを抽出して希望どおりに印刷する方法がわかりません。何か助けはありますか?すみません、初心者です...

4

1 に答える 1

1

XSLTスタイルシート言語はまさにそのために作られました。XML ドキュメントをさまざまな形式に変換します。PHP には、非常に使いやすいXSL拡張機能が付属しています。例もあります。

EDIT
それがあなたの目的にとってやり過ぎである場合は、オブジェクトを使用するようにノードを使用できるようにするPHPのSimpleXML拡張を確認する必要があります。

編集2

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<list>
    <item>
        <price>200</price>
        <title>Title1</title>
        <description>something here</description>   
    </item>
    ...
</list>
XML;

$xml  = simplexml_load_string($xmlstr);
$list = $xml->list;

foreach ( $list->item as $item ) {
    // Not sure if this works, but if it doesn't, substitute the sprintf
    // with plain string concatenation
    echo sprintf(
        '"%s","%s","","%d","1",""',
        $item->title,
        $item->description,
        $item->price
    );
}
于 2012-12-01T01:38:47.463 に答える