PHP XPATH: возвращаемый символ в строке xpath

Возникли проблемы с поиском первого символа Field42 внутри xpath, см. ниже. Какие-либо предложения?

$letters = split(',','0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z');
foreach($letters AS $letter) {
if(count($item->xpath("/Entries/Entry[Field42{0}='".$letter."']")) > 0) {
        $entries = $item->xpath("/Entries/Entry[Field42{0}='".$letter."']"); ?>

XML-структура

<Entries>
<Entry>
    <EntryId>33</EntryId>
    <Field71/>
    <Field41>Jane</Field41>
    <Field42>Smith</Field42>

person Jeffrey    schedule 10.03.2011    source источник
comment
Вы можете проще создать массив $letters с помощью array_merge(range(0,9), range('a', 'z')). Что происходит с вашим кодом? Есть ошибки? Что вы хотите и что он делает? Вы уверены, что ваш XPath действителен? Я никогда не видел {0} (но это ничего не значит),   -  person Felix Kling    schedule 11.03.2011
comment
Можете ли вы опубликовать структуру одной из записей Entry?   -  person MacAnthony    schedule 11.03.2011
comment
@Felix - ничего не происходит, $string{0}=s, но внутри xpath не работает. Вы знаете способ обойти это? Мне нужно отсортировать записи по алфавиту.   -  person Jeffrey    schedule 11.03.2011
comment
@MacAnthony — базовая структура xml, которую необходимо расположить в алфавитном порядке по фамилии.   -  person Jeffrey    schedule 11.03.2011
comment
@Jeffrey: Бьюсь об заклад, PHP выдает какую-то ошибку или предупреждение, сообщая вам, что выражения XPath недействительны.   -  person Felix Kling    schedule 11.03.2011
comment
@Jeffrey: Проверьте мой ответ с помощью решения только для выражения XPath.   -  person    schedule 11.03.2011


Ответы (2)


Вы можете использовать функцию XPath starts-with:

$item->xpath("/Entries/Entry[starts-with(Field42,'".$letter."')]")
person linepogl    schedule 10.03.2011

Если вы хотите, чтобы все элементы Entry начинались с буквы из заданной строки, используйте:

/Entries/Entry[contains('0123456789abcdefghijklmnopqrstuvwxyz',substring(.,1,1))]

person Community    schedule 10.03.2011