2015-07-31 4 views
2

Мне нужно извлечь информацию из внешнего узла документа xml (самого документа). используя приведенную ниже XML:PHP SimpleXML получить узел документа

<?xml version="1.0" encoding="UTF-8" ?> 
<revue date="2015" issue="12345"> 
    <innernode>Oi</innernode> 
</revue> 

я хотел бы извлечь 2015 и 12345. я терпеть неудачу, если я пытаться читать узел revue с помощью цикла Еогеасп

foreach ($xml->revue as $revueIn) { 
    foreach ($revueIn->attributes() as $z => $y) { 

, чтобы увидеть, если у меня есть опечатки или что-то, я перевернутой innernode и revue

<?xml version="1.0" encoding="UTF-8" ?> 
<innernode> 
    <revue date="2015" issue="12345">Oi</revue> 
</innernode> 

и выше код работал (нашел revue узел и правильно прочитать его атрибуты)

поэтому, мне кажется, что внешний узел обрабатывается/воспринимается по-разному SimpleXML.

Кто-нибудь знает, как получить доступ к самому удаленному узлу? tks заранее 4 ваше время.

+2

Попробуйте 'Еогеасп ($ xml-> атрибуты() в $ г => $ у)' –

+0

поставки @MartinHonnen как ответ, потому что это правильно, и будет награжден как таковой. SimpleXML не получает доступ к документу в качестве узла (рассматривает ли он как PARENT?). Атрибуты не являются атрибутами узлов, а атрибутами документа и должны быть доступны напрямую, с атрибутами() и getName(). –

+1

SimpleXML не видит корневой элемент в итерации. На него ссылается переменная, связанная с объектом SimpleXML. Таким образом, имя узла $ xml будет «revue». – splash58

ответ

1

Насколько я понимаю, корневой элемент - это просто ваша переменная xml, поэтому для доступа к ее атрибутам вы можете просто использовать foreach ($xml->attributes() as $z => $y).

+0

Правильно! Спасибо 4 вашего времени, я надеюсь, что это поможет другим. –

1

revue не узел документа, а узел элемента. Фактически это элемент документа.

Если вы загрузите XML в SimpleXMLElement, он вернет элемент документа. Вы можете использовать синтаксис массива для доступа к атрибутам.

Выход:

string(4) "2015" 

Атрибут возвращается как SimpleXMLElement. Возможно, вам придется бросить его.

С помощью SimpleXMLElement::attributes() вы можете получить доступ ко всем атрибутам в цикле.

$element = new SimpleXMLElement($xml); 
foreach ($element->attributes() as $name => $value) { 
    var_dump($name, (string)$value); 
} 

Выход:

string(4) "date" 
string(4) "2015" 
string(5) "issue" 
string(5) "12345" 
+0

ясно и хорошо документировано. UPVOTED! :) –