imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 04.01.2007, 16:53     # 1
UnOuter
Member
 
Регистрация: 17.03.2005
Адрес: Kiev
Сообщения: 235

UnOuter Реально крут(а)UnOuter Реально крут(а)UnOuter Реально крут(а)UnOuter Реально крут(а)
Регулярные выражения помогите

В общем у меня вопрос по регулярным выражениям, помогите составить его? пожалуйста.
Имеется:
<w3s.response>
<reqn>1234567</reqn>
<retval>dsdsad</retval>
<retdesc>dasdjghj</retdesc>
<invoice id="432" ts="bla bla bla">
<orderid>gfdgdfg</orderid>
<customerwmid>gfdgfd</customerwmid>
</invoice>
</w3s.response>

нужно извелчь значения заключающеся в тегах <reqn></reqn> и в теге invoice id=

то есть в PHP

$str=file_get_contents("x1.xml");
preg_match("регулярное выражение", $str, $stre);
print_r($stre);

и еще, если можно составить выражение для извлечения просто <reqn> </reqn>


PS просьба не предлагать использовать стандартыне PHP функции XML парсинга.

Спасибо надеюсь на вашу помощь!
__________________
Каждый может сказать, что он может сделать что-то лучше других, но на практике - очень часто не так.
UnOuter вне форума  
Старый 05.01.2007, 14:14     # 2
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
зачем забивать гвозди микроскопом?

для этой задачи не регэкспы нужны, а xml-xsl преобразование

вот xsl, который делает то, что тебе надо:

PHP код:
<xsl:stylesheet
    xmlns
:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>

    <
xsl:output method="text"/>
    
    <
xsl:template match="/">
          <
xsl:apply-templates select="w3s.response/reqn"/>
          <
xsl:apply-templates select="w3s.response/invoice"/>
    </
xsl:template>

    <
xsl:template match="w3s.response/reqn">
      
reqn: <xsl:value-of select="."/>
    </
xsl:template>
    
    <
xsl:template match="w3s.response/invoice">
      
id: <xsl:value-of select="./@id"/>
    </
xsl:template>

</
xsl:stylesheet
идея, думаю, понятна
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 05.01.2007, 14:29     # 3
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
Цитата:
UnOuter:
preg_match("регулярное выражение", $str, $stre);
так вроде вот так наверное пойдет:
preg_match (".reqn.(.*)..reqn.", $str1, $str2)
там возможно еще в начале и в конце надо добавить по символу "/" - но это не точно помню, "точка" - это любой символ - просто возможно символы <>/ могут неверно обработаться и их надо экранировать, чтобы это не делать я частенько точку ставлю если это не создает множественности всяких результатов
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 05.01.2007, 16:38     # 4
UnOuter
Member
 
Регистрация: 17.03.2005
Адрес: Kiev
Сообщения: 235

UnOuter Реально крут(а)UnOuter Реально крут(а)UnOuter Реально крут(а)UnOuter Реально крут(а)
Цитата:
Сообщение от BorLase
зачем забивать гвозди микроскопом?

для этой задачи не регэкспы нужны, а xml-xsl преобразование

вот xsl, который делает то, что тебе надо:

PHP код:
<xsl:stylesheet
    xmlns
:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>

    <
xsl:output method="text"/>
    
    <
xsl:template match="/">
          <
xsl:apply-templates select="w3s.response/reqn"/>
          <
xsl:apply-templates select="w3s.response/invoice"/>
    </
xsl:template>

    <
xsl:template match="w3s.response/reqn">
      
reqn: <xsl:value-of select="."/>
    </
xsl:template>
    
    <
xsl:template match="w3s.response/invoice">
      
id: <xsl:value-of select="./@id"/>
    </
xsl:template>

</
xsl:stylesheet
идея, думаю, понятна
--------------------------------------------------------------------

XML я беру на стороннем сервере!

Цитата:
Сообщение от Naked
так вроде вот так наверное пойдет:
preg_match (".reqn.(.*)..reqn.", $str1, $str2)
там возможно еще в начале и в конце надо добавить по символу "/" - но это не точно помню, "точка" - это любой символ - просто возможно символы <>/ могут неверно обработаться и их надо экранировать, чтобы это не делать я частенько точку ставлю если это не создает множественности всяких результатов

ну да оно работает но масив имеет такой вид

Array
(
[0] => <reqn>1234567</reqn>
[1] => 1234567
)

а я хотел бы чтобы вот так

Array
(
[0] => 1234567
)
__________________
Каждый может сказать, что он может сделать что-то лучше других, но на практике - очень часто не так.
UnOuter вне форума  
Старый 05.01.2007, 17:46     # 5
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
вырежи лишний элемент из массива, возвращенного функцией. preg_match всегда возвращает в качестве одного из элементов весь стринг, сматченный регэкспом, так что одну только цифровую строку ты не получишь.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 05.01.2007, 18:12     # 6
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
Цитата:
Сообщение от UnOuter
--------------------------------------------------------------------

XML я беру на стороннем сервере!
да какая разница - хоть от Святого Духа
Цитата:
а я хотел бы чтобы вот так

Array
(
[0] => 1234567
)
PHP код:
<?php
// $xml and $xsl contain the XML and XSL data

$arguments = array(
     
'/_xml' => $xml,
     
'/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh xslt_create();

// Process the document
$result xslt_process($xh'arg:/_xml''arg:/_xsl'NULL$arguments); 
if (
$result) {
    print 
"SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
    print 
" variable, the \$result variable has the following contents\n<br>\n";
    print 
"<pre>\n";
    print 
$result;
    print 
"</pre>\n";
}
else {
    print 
"Sorry, sample.xml could not be transformed by sample.xsl into";
    print 
"  the \$result variable the reason is that " xslt_error($xh) . 
    print 
" and the error code is " xslt_errno($xh);
}
xslt_free($xh);
?>
( стыбрено с http://devzone.zend.com/node/view/id/1302#Heading16 )

возьми такой XSL:
PHP код:
<xsl:stylesheet
    xmlns
:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>

    <
xsl:output method="text"/>
    
    <
xsl:template match="/">
          <
xsl:apply-templates select="w3s.response/reqn"/>
    </
xsl:template>

    <
xsl:template match="w3s.response/reqn">
      <
xsl:value-of select="."/>
    </
xsl:template>
</
xsl:stylesheet
и ты на выходе в $result получишь свое 1234567

поверь, это гораздо грамотнее, чем применять к XML регэкспы
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.

Последний раз редактировалось BorLase; 05.01.2007 в 18:15.
BorLase вне форума  
Старый 05.01.2007, 18:22     # 7
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
и кто ж тут гвозди микроскопом забивает. Если нужно всего лишь взять один стринг из xml-документа и забыть про исходник - зачем запускать xslt-процессор и прочий оверхед? Такое решение будет быстрее, проще, понятнее, короче или в чём его преимущество-то - в философской кошерности?
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 05.01.2007, 18:40     # 8
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
уже, как минимум, не один, а два - внутренности тега и содержимое атрибута

а если этот XML изменят так, что появится не атрибут id, а тег <id>? или добавят id к любому другому, не только к <invoice>? тогда решение на регекспах накроется медным тазиком.

зачем создавать себе трудности там, где без этого можно обойтись?
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 30.01.2007, 18:55     # 9
mBreaker
Newbie
 
Аватар для mBreaker
 
Регистрация: 03.03.2005
Сообщения: 10

mBreaker Нуль без палочки
а я всё-таки за решение с regexp'ами... далеко не все хостеры подключают xslt процессор к апачу, зато регэкспы 100% у всех прокатят...
__________________
Магазины, фирмы, организации, предприятия, адреса, телефоны, сайты, гостиницы, банки, такси, клубы. Cправочник Магнитогорска. http://www.mabs.ru
mBreaker вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 18:09.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.