2017-02-20 1 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(); 

출력 :! [CDATA []]로 링크가 포함되어

<?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

링크를 따라 가면 "내부 서버 오류"가 나타납니다. 따라서 '&'또는'& '이 있으면 아무런 차이가 없습니까? - 링크가 작동하거나 파괴됩니까? – Jan

0

다행히 네!,이를 확인 :

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

echo (string)$link; 

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

감사합니다, Idir

+0

그리고 어떻게 편집 할 수있는 구멍 XML 파일? – Jan