2014-10-10 3 views
0

Я новичок в обработке и чтение строк XML в PHPвытаскивая одно значение в XML

У меня есть XML, как этот

<sports-metadata> 
    <sports-content-codes> 
    <sports-content-code code-type="sport" code-key="15027000" code-name="Golf"/> 
    <sports-content-code code-type="league" code-key="l.pga.com" code-name="Professional Golf Association"/> 
    <sports-content-code code-type="season-type" code-key="regular"/> 
    <sports-content-code code-type="season" code-key="2015"/> 
    <sports-content-code code-type="priority" code-key="normal"/> 
    </sports-content-codes> 
</sports-metadata> 

Я прочитал в XML с помощью $xml=simplexml_load_file()

I может попасть в этот раздел XML с помощью $xml->{'sports-content-codes'}->{'sports-content-code'}

в спорте-контент-кода

Я хочу получить/получить значение кодового ключа, где code-type="season"

Как это сделать на PHP?

Спасибо всем.

- Ed

+0

Вы делаете это в PHP, выбрав элемент с условием значения атрибута у вас есть, а затем получить атрибут. См. [Дублированный вопрос] (http: // stackoverflow.com/q/992450/367456) и для чтения атрибутов см. другой дубликат: [Как получить значение атрибута из XML-файла в PHP?] (http://stackoverflow.com/q/1256796/367456) – hakre

ответ

2

Обычно используется ->attributes() метод, чтобы получить эти атрибуты:

foreach($xml->{'sports-content-codes'}->{'sports-content-code'} as $content_code) { 
    $attr = $content_code->attributes(); 
    $code_type = (string) $attr->{'code-type'}; 
    echo $code_type; 
} 

Sample Output

1

Использование Xpath ...

... с SimpleXML:

$element = simplexml_load_string($xml); 
$array = $element->xpath(
    '//sports-content-code[@code-type="season"]' 
); 
var_dump(
    (string)$array[0]['code-key'] 
); 

... или DOM:

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXpath($dom); 
var_dump(
    $xpath->evaluate(
    'string(//sports-content-code[@code-type="season"]/@code-key)' 
) 
); 

выход (оба):

string(4) "2015" 

Xpath является язык выражений для DOM (думаю SQL для СУБД). SimpleXMLElement::xpath() поддерживает некоторые из них (только выражения, возвращающие элементы или узлы атрибутов). Результат всегда будет массивом объектов SimpleXMLElement. DOMXpath::evaluate() поддерживает полный Xpath 1.0. Результатом является DOMNodelist или скалярное значение, в зависимости от выражения.

Выражение:

Выберите "Спорт-контент-код" элементные узлы

//sports-content-code

с "кодом типа" узел атрибута сезона

//sports-content-code[@code-type="season"]

получить атрибутные узлы «код-ключ»

//sports-content-code[@code-type="season"]/@code-key

бросил список узлов в строку возвращая текстовое содержимое первого узла

string(//sports-content-code[@code-type="season"]/@code-key)

Смежные вопросы