0

私は書籍の Web サイト biblio の API を使用しています。パラメーターを入力して書籍を照会した後、通常の文字列が返されますが、何らかの理由で文字列が xml 形式で返されません。私の質問...簡単な方法はありますか? phpでプレーン文字列をxmlに変換するには?

プレーン文字列の例

Book ID: 524072799
Author: George R. R. Martin
Title: A Song of Ice and Fire, 7 Volumes 
Description: Harper Voyager, 2012. New and in stock.. Paperback. New. Book. 
ISBN: 9780007477159
Publisher: Harper Voyager
Date: 2012
Currency: GBP
Price: 55.00
Bookseller: El Pinarillo Books 
Bookseller_Location: GBR
URL: http://www.biblio.com/details.php?dcx=524072799
Shipping Ground: 3.15 
Shipping Expedited: 3.95
4

3 に答える 3

1

別の方法として、php配列を利用できます(preg_matchやXMLは必要ありません)。

// The string returned;
$string = <<<STRING
Book ID: 524072799
Author: George R. R. Martin
......
Shipping Ground: 3.15 
Shipping Expedited: 3.95
STRING;

行ごとに分割することから始めることができます

$lines = explode("\n",$string);

次に、それをキーペア値として配列に保存します

$result = array();
foreach($lines as $line){
   list($key,value) = explode(":",$line);
   $result[trim($key)] = trim($value);
}

今、あなたはそのような任意の行にアクセスすることができます

echo $result['Book ID']; // 524072799
echo $result['Author']; //  George R. R. Martin

等々。これがあなたが探しているものであることを願っています

于 2012-09-24T17:47:43.383 に答える
1

explode("\n",$text)andforeach()ループを使用してファイルを書き込みます。

$xml="<book>";
$rows = explode("\n",$text);
foreach($rows as $row){
   $pieces = explode(':',$row); //get the tag and value
   $tag = str_replace(' ','_',strtolower($pieces[0])); //make sure the tag is valid
   if (!isset($pieces[1])){$pieces[1]="";} //make sure there is a value
   $xml.="<$tag>".$pieces[1]."</$tag>\n";//add it to the xml
}
$xml.="</book>";
于 2012-09-24T17:48:28.590 に答える
1

xml または json を取得するオプションが確実にない場合は、次のようにすることができます。

応答から配列を作成します。

<?php 
$str = 'Book ID: 524072799
Author: George R. R. Martin
Title: A Song of Ice and Fire, 7 Volumes 
Description: Harper Voyager, 2012. New and in stock.. Paperback. New. Book. 
ISBN: 9780007477159
Publisher: Harper Voyager
Date: 2012
Currency: GBP
Price: 55.00
Bookseller: El Pinarillo Books 
Bookseller_Location: GBR
URL: http://www.biblio.com/details.php?dcx=524072799
Shipping Ground: 3.15 
Shipping Expedited: 3.95
';

$lines = explode('<br />',nl2br($str));

$array = array();
foreach($lines as $line){
    $line = trim($line);
    if(empty($line)){continue;}
    $line_parts = explode(':',$line);
    $array[$line_parts[0]] = $line_parts[1];
}
/*
You now have Array
(
    [Book ID] =>  524072799
    [Author] =>  George R. R. Martin
    [Title] =>  A Song of Ice and Fire, 7 Volumes
    [Description] =>  Harper Voyager, 2012. New and in stock.. Paperback. New. Book.
    [ISBN] =>  9780007477159
    [Publisher] =>  Harper Voyager
    [Date] =>  2012
    [Currency] =>  GBP
    [Price] =>  55.00
    [Bookseller] =>  El Pinarillo Books
    [Bookseller_Location] =>  GBR
    [URL] =>  http
    [Shipping Ground] =>  3.15
    [Shipping Expedited] =>  3.95
)
*/
?>

次に、その配列から XML を作成します。

<?php
//To create and output xml from the given array
header('Content-Type: text/xml');
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><books/>');

$node = $xml->addChild('book');
foreach($array as $key=>$value){
    $node->addChild(str_replace(' ','_',$key), trim($value));
}

//DOMDocument to format code output
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());

echo $dom->saveXML();
/*
<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <Book_ID>524072799</Book_ID>
    <Author>George R. R. Martin</Author>
    <Title>A Song of Ice and Fire, 7 Volumes</Title>
    <Description>Harper Voyager, 2012. New and in stock.. Paperback. New. Book.</Description>
    <ISBN>9780007477159</ISBN>
    <Publisher>Harper Voyager</Publisher>
    <Date>2012</Date>
    <Currency>GBP</Currency>
    <Price>55.00</Price>
    <Bookseller>El Pinarillo Books</Bookseller>
    <Bookseller_Location>GBR</Bookseller_Location>
    <URL>http</URL>
    <Shipping_Ground>3.15</Shipping_Ground>
    <Shipping_Expedited>3.95</Shipping_Expedited>
  </book>
</books>
*/
?>
于 2012-09-24T17:57:06.310 に答える