2015-07-25 5 views
1

Я искал SO и нашел некоторые ответившегоИспользование SimpleXML для выбора содержимого одного узла с помощью атрибута

xpath-how-to-select-a-node-by-its-attribute

simplexml-get-element-content-based-on-attribute-value

и

simplexml-selecting-elements-which-have-a-certain-attribute-value

, но все они не помогли меня с моей проблемой. Возможно, проблема была схожей, но это было не то же самое, так что она ничего не решила.

Как вы можете видеть в заголовке, я хочу выбрать содержимое определенного узла.

Во-первых, здесь образец XML тот похож на XML, я использую:

<?xml version="1.0" encoding="utf-8"?> 
<translation> 
    <home> 
     <button name="aaa">Hello</button> 
     <button name="bbb">World</button> 
    </home> 
    <office> 
     <button name="ccc">Foo</button> 
     <button name="ddd">Bar</button> 
     <string name="xxx">Sample</string> 
    </office> 
<translation> 

Так что я на самом деле хочу для того чтобы достигнуть, чтобы использовать мой XML выбрать как PHP ассоциативный массивов. Что-то вроде этого:

$xml->home->button["aaa"]; 

или может больше, как XPath:

$xml->home->button['@name="aaa"']; 

оба должны вернуться Hello, но все, что я пытаюсь в конечном итоге с объектом атрибута (отсутствует содержание на всех) или пустой возврат.

Я пробовал:

$xml = simplexml_load_file("my.xml"); 

//1) 
$data = $xml->xpath('//home[button[@name="aaa"]]'); 
//what simply gives me an array of all buttons and they can be accessed by its id 

//2) 
$data = $xml->xpath('//home/button[@name="aaa"]'); 
//what gives me the expacted node but not the content and even the 
//print_r or var_dump doesnt show me the content anymore 

Я попробовал посмотреть больше вещей, которые на самом деле все в конечном итоге без результата.

Что я могу сделать для достижения своей цели?

ответ

1

Это выводит ожидаемый Hello для меня:

$string = <<<XML 
<translation> 
    <home> 
     <button name="aaa">Hello</button> 
     <button name="bbb">World</button> 
    </home> 
    <office> 
     <button name="ccc">Foo</button> 
     <button name="ddd">Bar</button> 
     <string name="xxx">Sample</string> 
    </office> 
</translation> 
XML; 
$xml = new SimpleXMLElement($string); 
$data = $xml->xpath("//home/button[@name='aaa']")[0]; 
echo $data; 

eval.in demo

+0

OMG, тратить так много времени с этим и в конце ее просто '[0]', который решает Everyting .. .. grrrrr: D Большое спасибо. Я приму это, как только это станет возможным. – Dwza

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