xml — PHP-запрос без учета регистра в Xpath со значением атрибута узла

Я работаю с PHP-сценарием, чтобы прочитать Restful XML Feed.
При выборе узла пользователя мне нужно установить сравнение без учета регистра; однако мне не удалось найти точный синтаксис для моего конкретного сценария.
Код действительно работает; однако, если бы кто-то мог провести строку над моим кодом нечувствительности к регистру, я был бы очень благодарен.
Спасибо за любые подсказки относительно потенциальных улучшений в коде.

Код XML (‘test_a.xml’):

<?xml version="1.0" encoding="UTF-8"?>
<Users xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dmu="http://www.digitalmeasures.com/schema/user-metadata">
<User username="john-smith" dmu:userId="14" SecondaryID="jsmith" enabled="false">
<FirstName>John</FirstName>
<MiddleName>L</MiddleName>
<LastName>Smith</LastName>
<Email>john-smith@email.com</Email>
<LocalAuthentication/>
<Item xlink:type="simple" xlink:href="/login/service/v4/User/USERNAME:john-smith"/>
</User>
<User username="mary-smith" dmu:userId="19" SecondaryID="MSMITH">
<FirstName>Mary</FirstName>
<LastName>Smith</LastName>
<Email>mary-smith@email.com</Email>
<LocalAuthentication/>
<Item xlink:type="simple" xlink:href="/login/service/v4/User/USERNAME:mary-smith"/>
</User>
</Users>

Код PHP:

<?php
$test_var = 'msmith'; //sample input lowercase
//$test_var = 'MSMITH'; //sample input uppercase
$secondary_user_id = strtolower($test_var); //to lowercase for comparison in user node, below.

$url_bio_report = "test_a.xml";
$xml_bio_report = simplexml_load_file($url_bio_report);
$xml_bio_report->registerXPathNamespace('xlink','http://www.w3.org/1999/xlink');
$xml_bio_report->registerXPathNamespace('dmu','http://www.digitalmeasures.com/schema/user-metadata');

//below - original xpath query
//$xml_bio_report_abbrev = $xml_bio_report->xpath('//User[@SecondaryID="'.$secondary_user_id.'"]');

//below - attempt for case insensitivity
$xml_bio_report_abbrev = $xml_bio_report->xpath('//User[contains(translate(@SecondaryID,"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"),"'.$secondary_user_id.'")]');

$str_user_exists='';
if ($xml_bio_report_abbrev){
$user_name = $xml_bio_report_abbrev[0]['username'];
echo '<br>'.$user_name;
$secondary_id = $xml_bio_report_abbrev[0]['SecondaryID'];
echo '<br>'.$secondary_id;
$str_user_exists = 'true'; //
echo '<br>'.$str_user_exists;
} else {
$str_user_exists = 'false'; //
echo '<br>'.$str_user_exists;
}
?>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector