2016-08-25 6 views
0

У меня есть XML-файлSimpleXMLElement объект разборе

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<comments 
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
    <authors> 
     <author></author> 
    </authors> 
    <commentList> 
     <comment authorId="0" ref="G2"> 
      <text> 
       <t xml:space="preserve"> test comment 1</t> 
      </text> 
     </comment> 
     <comment authorId="0" ref="G4"> 
      <text> 
       <t xml:space="preserve"> test comment 2</t> 
      </text> 
     </comment> 
    </commentList> 
</comments> 

я загрузить его с помощью SimpleXMLElement функции PHP

$com = new SimpleXMLElement('data.xml'); 

когда я print_r ($ ком) я получаю

SimpleXMLElement Object 
(
    [authors] => SimpleXMLElement Object 
     (
      [0] => SimpleXMLElement Object 
       () 
     ) 
    [commentList] => SimpleXMLElement Object 
     (
      [comment] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [@attributes] => Array 
           (
            [authorId] => 0 
            [ref] => G2 
           ) 
          [text] => SimpleXMLElement Object 
           ([t] => test comment 1) 
         ) 
        [1] => SimpleXMLElement Object 
         (
          [@attributes] => Array 
           (
            [authorId] => 0 
            [ref] => G4 
           ) 
          [text] => SimpleXMLElement Object 
           (
            [t] => test comment 2 
           ) 
         ) 
       ) 
     ) 
) 

я хочу читать комментарии, используя значения ref, я попытался прочитать значение G2, как

echo $value = (string) $comments->commentList->comment[0]->ref['G2']; 

, но не успех, любая идея, как считывать значения с помощью значений реф как G2, G4

+0

Вы пытаетесь получить значение 'ref' атрибута или вы пытаетесь найти комментарии, где' ref' атрибута соответствует определенное значение? –

+0

ya хочу найти комментарий, где значение значения соответствует G2 G4, тогда необходимо прочитать комментарий – user889030

ответ

1

Если вы хотите получить текст комментария, связанные с любыми комментариями, которые имеют ref="G2", то вы будете делать это. Итерации через каждый элемент комментария, получите значение атрибута ref, проверьте его против целевого значения, и если он совпадает, получите текстовое значение.

$xmlElement = new SimpleXMLElement($myXML); 

foreach($xmlElement->commentList->comment as $comment) 
{ 
    if($comment["ref"] == "G2") 
    { 
     echo $comment->text->t; 
     // optionally echo line break or some other formatting 
    } 
} 

Live Example

+0

спасибо :) за помощь – user889030

0

Вы можете использовать Xpath для выборки комментариев текстов отфильтрованного атрибута:

$comments = new SimpleXMLElement($xml); 
$comments->registerXpathNamespace(
    'ofm', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' 
); 

$texts = $comments->xpath('ofm:commentList/ofm:comment[@ref="G2"]/ofm:text'); 
foreach ($texts as $text) { 
    var_dump((string)$text->t); 
} 

Выход:

string(15) " test comment 1" 

Вашего XML использует пространство имен по умолчанию, так для Xpath вам придется регистрироваться и использовать префикс.

DOM не будет сильно отличаться для этого:

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 
$xpath->registerNamespace(
    'ofm', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' 
); 

$texts = $xpath->evaluate(
    '/ofm:comments/ofm:commentList/ofm:comment[@ref="G2"]/ofm:text' 
); 
foreach ($texts as $text) { 
    var_dump($text->textContent); 
}