2017-02-20 2 views
1

私は![CDATA []]データを含むXMLファイルを持っています。このように:PHPの[CDATA []]を変更しますか? (XML)

<link><![CDATA[https://google.de]]></link> 

私は[CDATA []]データを変更できないとか、いくつかの特殊文字が含まれていると聞いていました。しかし、私はもう覚えていません... それは私がここで尋ねる理由です。

![CDATA []]の値を変更することはできますか?

リンクに「?= dadc」のようなものを追加したいだけです。

編集: 私のXMLファイル構造(URLを編集したい):

<?xml version="1.0" encoding="UTF-8"?> 
    <rss> 
     <channel xmlns:g="http://base.google.com/ns/1.0" version="2.0"> 
     <title>Google Eur English 1</title> 
     <description/> 
     <item> 
      <title>Anno 2070</title> 
      <g:image_link><![CDATA[http://cdn.kinguin.net/media/catalog/category/anno_8.jpg]]></g:image_link> 
      <url><![CDATA[http://www.kinguin.net/category/4/anno-2070/?nosalesbooster=1&country_store=1&currency=EUR]]></url> 
      <price><![CDATA[3.88 EUR]]></price> 
      <platform>Uplay</platform> 
     </item> 
     </channel> 
    </rss> 

挨拶は

答えて

2

これはSimpleXMLにも当てはまります。 CDATAセクションは特別な種類のテキストノードです。実際には、人間のために埋め込み部分をより読みやすくするためにここにあります。 SimpleXMLは実際にXMLノードを処理しないので、標準のテキストノードに変換する必要があります。

XMLにJSまたはHTMLフラグメントがある場合は、<などの特殊文字がエスケープされていないと読みやすくなります。これはCDATAセクションのためのものです(また、ブラウザのいくつかの下位互換性)。

CDATAセクションを変更して保存するには、DOMを使用する必要があります。 DOMは実際には異なるノードタイプを知っています。ここで小さな例です:

$xml = '<link><![CDATA[https://google.de]]></link>'; 

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 

foreach ($xpath->evaluate('//link/text()') as $linkValue) { 
    $linkValue->data .= '?abc'; 
} 
echo $document->saveXml(); 

出力:!

<?xml version="1.0"?> 
<link><![CDATA[https://google.de?abc]]></link> 
+0

自分のCDATA値を編集しようとしましたが、私のものを追加して追加しようとしましたが、私のリンクは次のようになります:https://drive.google.com/file/d/0BzLxINxZFzoveWR3Qi1XelFjM0E/view?usp=sharing 私はあなた適切なバージョンを持っていると私はあなたのようにそれを実装します。しかし、CDATAと '&'との違いは何ですか? – Jan

+1

DOMまたはSimpleXML APIを使用している呼び出し元の場合、ここでは読み上げレベルに違いはありません。文字列とまったく同じデータを読み込む必要があります。違いはシリアライゼーションにあります。 CDATAセクションはエスケープする必要がありません。そのため、内部のフラグメントは人間にとって読みやすくなります。受け取るXMLパーサーに違いはありません。以下にその違いを示す小さな例を示します。https://eval.in/740419 – ThW

+0

あなたのリンクをたどると「Internal Server Error」というメッセージが表示されます。したがって、 '&'や '&'があれば違いはありませんか? - リンクが機能するか、リンクが破棄されますか? – Jan

0

幸いはい!これをチェック:

$link = simplexml_load_string(
    '<link><![CDATA[Hello, world!]]></link>' 
); 

echo (string)$link; 

PHP: How to handle <![CDATA[ with SimpleXMLElement?

よろしく、 Idir

+0

そして、どのように私はとのリンクが含まれている穴のXMLファイルを編集することができます[CDATA []]? – Jan