2014-01-06 2 views
1

У меня есть этот XML:SimpleXML XPath извлечения атрибутов, а не текстовое значение

<root> 
    <parent> 
     <child id="childAtt"> 
      <subChild id="subAtt">Value to retrieve</subChild> 
     </child> 
    </parent> 
</root> 

Я в настоящее время пытается получить текстовое значение subChild с помощью этого XPath:

$total = $xml->xpath("/*//child[@id='childAtt']/subChild[@id='subAtt']"); 

Однако это возвращает subChild Значение атрибута, а не текстовое значение узла.

Я хочу знать, как получить текстовое значение subChild с идентификатором subAtt.

ответ

1

Вам просто нужно, чтобы получить доступ к первому элементу и типаж его как строку:

$total = (string) $xml->xpath("/*//child[@id='childAtt']/subChild")[0]; 
var_dump($total); 

Выход:

string(17) "Value to retrieve" 
0

Вы также можете попытаться извлечь текст непосредственно с помощью XPath запроса:

$total = (string) $xml->xpath("/*//child[@id='childAtt']/subChild/text()") 
0

Ваш запрос выбрать eleme нт. Просто чтобы расширить @ ответ Амал, результат вашего запроса представляет собой массив из всех результатов, выглядит следующим образом:

array(1) { 
    [0] => 
    class SimpleXMLElement#2 (2) { 
    public [email protected] => 
    array(1) { 
     'id' => 
     string(6) "subAtt" 
    } 
     string(17) "Value to retrieve" 
    } 
} 

В словах: первый элемент является SimpleXMLElement экземпляр которого строковое значение является искомым текстом.

Полный пример:

$string = <<<XML 
<root> 
    <parent> 
     <child id="childAtt"> 
      <subChild id="subAtt">Value to retrieve</subChild> 
     </child> 
    </parent> 
</root> 
XML; 

$xml = new SimpleXMLElement($string); 
$result = $xml->xpath("/*//child[@id='childAtt']/subChild[@id='subAtt']"); 

var_dump($result); 
print (string) $result[0] . "\n"; 
Смежные вопросы