Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > "Разборка" xml-файла


Автор: Dysena 11.1.2013, 15:15
Я новичок по программированию PL/SQL. Столкнулась со следующей проблемкой: 

Реально ли "разобрать" произвольный xml-файл на параметры и объединить их в одну строку. 

Например, к нам поступил файл: 
Код
<params><PHONE>222</PHONE><MPHONE>777</MPHONE></params>


На выходе должна быть строка или текст следующего вида: 
'phone=222&mphone=777'.

Автор: diadiavova 11.1.2013, 15:42

M
diadiavova
Перенесено из XML

Автор: Zloxa 11.1.2013, 15:56
Для решения задачи в данной подстановкe более подходит xslt нежели pl/sql. (LSD, перенеси плиз тему обратно к дядевове  smile ).

Выполнить xsl преобразование из pl/sql http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb03usg.htm#ADXDB4171.


Автор: LSD 11.1.2013, 16:18

M
LSD
Перенесено из Oracle

Автор: Zloxa 11.1.2013, 17:25
Код

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 
Connected as zloxa@ORCL01
 
SQL> set define off
SQL> select extractValue(xmltype('<params><PHONE>222</PHONE><MPHONE>777</MPHONE><elem1>1</elem1></params>')
  2                        .transform(xmltype('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3                                               <xsl:output method="text"/>
  4                                               <xsl:template match="/">
  5                                                 <xsl:for-each select="/*/*">
  6                                                   <xsl:value-of select="name()"/>=<xsl:value-of select="text()"/>
  7                                                   <xsl:choose>
  8                                                     <xsl:when test="position() != last()">&amp;amp;</xsl:when>
  9                                                   </xsl:choose>
 10                                                 </xsl:for-each>
 11                                               </xsl:template>
 12                                             </xsl:stylesheet>
 13                                             '
 14                                           )
 15                                   )
 16                         ,'text()') result
 17  from dual
 18  /
 
RESULT
--------------------------------------------------------------------------------
PHONE=222&MPHONE=777&elem1=1  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)