Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / преобразовать через XSLT / 3 сообщений из 3, страница 1 из 1
04.04.2012, 18:00
    #37738986
pigmo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразовать через XSLT
Привет.
Делаю проект в Oracle BPM 11g.
Столкнулся с проблемои есть на в воходе фаил вида

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<Request>
<requestPermissions>
      <permissions xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
         <dataOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner76</dataOwner>
         <dataSubOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner77</dataSubOwner>
         <permissionId xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId78</permissionId>
         <permissionName xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName79</permissionName>
         <status xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status80</status>
      </permissions>
      <permissions xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
         <dataOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner81</dataOwner>
         <dataSubOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner82</dataSubOwner>
         <permissionId xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId83</permissionId>
         <permissionName xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName84</permissionName>
         <status xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status85</status>
      </permissions>
      <permissions xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
         <dataOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner81</dataOwner>
         <dataSubOwner xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner82</dataSubOwner>
         <permissionId xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId88</permissionId>
         <permissionName xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName89</permissionName>
         <status xmlns="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status90</status>
      </permissions>
   </requestPermissions>
</Request>



надо его преобразовать через XSLT в фаил вида

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<Result>
 <ns5:permissionsGroup>
      <ns6:owner xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">dataOwner76</ns6:owner>
      <ns6:subOwner xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">dataSubOwner77</ns6:subOwner>
      <ns6:permissionScope xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">
         <ns2:permissions xmlns:ns2="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
            <ns3:dataOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner76</ns3:dataOwner>
            <ns3:dataSubOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner77</ns3:dataSubOwner>
            <ns3:permissionId xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId78</ns3:permissionId>
            <ns3:permissionName xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName79</ns3:permissionName>
            <ns3:status xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status80</ns3:status>
         </ns2:permissions>
      </ns6:permissionScope>
   </ns5:permissionsGroup>
   <ns5:permissionsGroup>
      <ns6:owner xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">dataOwner81</ns6:owner>
      <ns6:subOwner xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">dataSubOwner82</ns6:subOwner>
      <ns6:permissionScope xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner">
         <ns2:permissions xmlns:ns2="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
            <ns3:dataOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner81</ns3:dataOwner>
            <ns3:dataSubOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner82</ns3:dataSubOwner>
            <ns3:permissionId xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId83</ns3:permissionId>
            <ns3:permissionName xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName84</ns3:permissionName>
            <ns3:status xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status85</ns3:status>
         </ns2:permissions>
            <ns2:permissions xmlns:ns2="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray">
            <ns3:dataOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataOwner81</ns3:dataOwner>
            <ns3:dataSubOwner xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">dataSubOwner82</ns3:dataSubOwner>
            <ns3:permissionId xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionId88</ns3:permissionId>
            <ns3:permissionName xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">permissionName89</ns3:permissionName>
            <ns3:status xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission">status90</ns3:status>
         </ns2:permissions>
      </ns6:permissionScope>
   <
</ns5:Result>


То ест во входном фаиле идут permissions, а в выходном - Они группируются по dataOwner внутри<permissionsGroup><permissionScope> </permissionScope></permissionsGroup> .
Как делать не знаю, до этого XSLT не встречал.

Помогите, пожалуйста
...
Рейтинг: 0 / 0
05.04.2012, 15:35
    #37740475
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразовать через XSLT
pigmo,

не понятно по какому принципу формируются неймспейсы.

Код: xml
1.
2.
<Result>
 <ns5:permissionsGroup>


уже ошибка, т.к. ns5 не объявлен. с помощью XSLT невалидный xml можно делать в виде text, только надо понять оно вам надо?

а в общем то что вы хотите ничего сложного не представляет, в примитивном варианте выглядит как-то так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ns2="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionArray"
  xmlns:ns3="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/Permission"
  xmlns:ns5="http://xmlns.oracle.com/undefined"
  xmlns:ns6="http://xmlns.oracle.com/bpm/bpmobject/RequestForms/PermissionsByOwner"

>
  <xsl:output method="xml" />

  <xsl:template match="/">
     <xsl:apply-templates />
  </xsl:template>
  <xsl:template match="Request">
     <Result>
        <xsl:apply-templates select="requestPermissions/permissions" />
     </Result>
  </xsl:template>
  <xsl:template match="permissions">
     <ns5:permissionsGroup>
        <xsl:apply-templates select="*[starts-with(name(), 'data')] mode="cropData" />
        <ns6:permissionScope>
          <xsl:apply-templates />
        </ns6:permissionScope>
     </ns5:permissionsGroup>
  </xsl:template>
  <xsl:template match="*">
     <xsl:element name="{name()}" namespace="ns3">
        <xsl:value-of select="text()" />
     </xsl:element>
  </xsl:template>
  <xsl:template match="*" mode="cropData">
     <xsl:element name="{substring-after( name(), 'data' )}" namespace="ns6">
        <xsl:value-of select="text()" />
     </xsl:element>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
05.04.2012, 15:40
    #37740490
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразовать через XSLT
если имя после обрезания надо с маленькой буквы, то чуть больше функций получится

<xsl:template match="*" mode="cropData">
<xsl:element name="{concat( translate( substring( name(), 5, 1), 'OS', 'os' ), substring( name(), 6))}" namespace="ns6">
<xsl:value-of select="text()" />
</xsl:element>
</xsl:template>
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / преобразовать через XSLT / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]