Как скрыть пустые теги в XML?

123
Jekyll
На сайте с 04.05.2009
Offline
136
#11

Замените


<area>
<value>'.$row['squarefeet'].'</value>
<unit>'.($row['squarefeet']!='' ? 'кв.м' : '').'</unit>
</area>

на

'.getNode($row['squarefeet']).'

И в начало скрипта вставьте

function getNode($squarefeet) {

if (strlen($squarefeet) == 0) return '';
else return "<area>
<value>".$squarefeet."</value>
<unit>".($squarefeet!='' ? 'кв.м' : '')."</unit>
</area> ";
}
Samail
На сайте с 10.05.2007
Offline
361
#12
Jekyll:
на
Код:
'.getNode($row['squarefeet']).'

Во, вот с такой строкой работает :). Пойду остальные теги по тому-же принципу ковырять :)

ParserYa
На сайте с 04.10.2010
Offline
29
#13

if (strlen($squarefeet) == 0) return '';

Я бы рекомендовал заменить на


if ($squarefeet == '') return '';
C
На сайте с 04.02.2005
Offline
277
#14

тогда уж

if (empty($squarefeet)) return '';

Samail
На сайте с 10.05.2007
Offline
361
#15

а как в

function getNode($squarefeet) {

if (strlen($squarefeet) == 0) return '';
else return "<area>
<value>".$squarefeet."</value>
<unit>".($squarefeet!='' ? 'кв.м' : '')."</unit>
</area> ";
}

К условию, что поле не пустое, добавить условие "и содержит только цифры", т.е. если в поле содержится символ отличный от цифры, то <area> тоже не видно.

ParserYa
На сайте с 04.10.2010
Offline
29
#16

Примерно так, но надо довести до ума:


if ((empty($squarefeet)) && (preg_replace('#[0-9]+#ius','',$squarefeet) != ''))
return '';
Samail
На сайте с 10.05.2007
Offline
361
#17
ParserYa:
(preg_replace('#[0-9]+#ius','',$squarefeet) != '')

А а как изменится строка, если условие

'[0-9 ]+((\.|,)[0-9]+)?'
т.е. как я понимаю цифры, точка или запятая, ещё цифры.

Пробовал менять

'#[0-9]+#ius'
на
'[0-9 ]+((\.|,)[0-9]+)?'

Браузер выдает ошибку: Строка 5, символ 18:<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br />

ParserYa
На сайте с 04.10.2010
Offline
29
#18

Стоп. Вы что вообще делаете своей измененной регуляркой? Я не смог понять ее предназначения :)

Суть моей регулярки preg_replace('#[0-9]+#ius','',$squarefeet) в том, что я вырезаю любое количество цифр больше 1, а потом сравниваю результат с пустой строкой. Если строка полученная после обработки не пустая, значит в $squarefeet были не только цифры.

#[0-9]+# означает одно и более вхождений цифр от 0 до 9. Если вам нужно добавить туда точку и запятую просто воткните их в те же квадратные скопки то есть: #[0-9\.,]# preg_replace('#[0-9\.,]#ius','',$squarefeet), а у вас вообще какой то бред в регулярке :)

Samail
На сайте с 10.05.2007
Offline
361
#19

ParserYa, мне нужно, что бы <area> не показывался если поле squarefeet (площадь) пустое или если в содержащееся в нем значение не соответствует шаблону цифры, точка или запятая, цифры. Т.е. "5 или 66 или 9.2 или 0,2" соответствуют шаблону, а "5р или ,2 или 6." не соответствует и в таком случае <area> показываться не должно. Пока вставил '#[0-9\-\.]+#ius', "Статус XSD:Error" наконец то сменилось на "Статус XSD: OK". Но думаю это не навеки т.к. пока у меня пользователи указывали только "65 кв." вместо "65", а до ",65" пока никто не додумался ...но ведь додумается со временем.

ParserYa
На сайте с 04.10.2010
Offline
29
#20

Samail, умеете вы доканывать :)


function getNode($squarefeet) {
preg_match_all('#[0-9]+[\.|,]?[0-9]+#is',$squarefeet,$res);
if ((empty($squarefeet)) || ($res[0][0] != $squarefeet)) return '';
else return "<area>
<value>".$squarefeet."</value>
<unit>".($squarefeet!='' ? 'кв.м' : '')."</unit>
</area> ";
}
123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий