Синтаксический анализ Php xml для значения элемента

#php

#php

Вопрос:

у меня есть следующий XML, возвращенный из вызова jsp

 <assumption name="test" id="34" description="vector description" is_shared="no" vector_type="Prepay">
<userVector>
<vectorType>"Prepay"</vectorType>
<ppydefTypeCode>"CDR"</ppydefTypeCode>
<ppydefVector>
<vectorName>"test"</vectorName>
<vectorSeasoning>No</vectorSeasoning>
<vectorPeriod>"6 12"</vectorPeriod>
<vectorData>"7 4"</vectorData>
</ppydefVector>
</userVector>
</assumption>
  

Каков наилучший способ получить информацию о VectorType и vectorName с помощью php.

Я пробовал что-то подобное, но не был уверен, как получить значение узла в php

 foreach ($xmlDoc->getElementsByTagName('userVector') as $vectorRow)
        {

            $vectorType = $xmlDoc->getElementsByTagName('vectorType');

        }
  

Ответ №1:

getElementsByTagName('vectorType') вернет a DOMNodeList , который вам дополнительно придется перебирать. Вы можете сохранить значение каждого элемента в переменной, обратившись к их nodeValue полям.

 foreach ($xmlDoc->getElementsByTagName('userVector') as $vectorRow){
    $vectorTypes = $vectorRow->getElementsByTagName('vectorType');
    foreach ($vectorTypes as $vectorTypeElement){
        $vectorType = $vectorTypeElement->nodeValue;
    }
}
  

Комментарии:

1. как мне проверить, существует ли элемент VectorType или нет

2. Технически мы должны предположить, что может быть несколько векторных типов, поэтому вы должны проверить, больше ли sizeof($vectorTypes) 0 .

Ответ №2:

Попробуйте это:

 $sx = new SimpleXMLElement($XMLData);
echo $sx->xpath('/assumption/userVector/vectorType')[0];
echo $sx->xpath('/assumption/userVector/ppydefVector/vectorName')[0];
  

Выводит:

 "Prepay"
"test"
  

Комментарии:

1. Не беспокойтесь, надеюсь, это помогло 🙂