powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / преобразовать через XSLT
3 сообщений из 3, страница 1 из 1
преобразовать через XSLT
    #37738986
pigmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Делаю проект в 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
преобразовать через XSLT
    #37740475
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
преобразовать через XSLT
    #37740490
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если имя после обрезания надо с маленькой буквы, то чуть больше функций получится

<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
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / преобразовать через XSLT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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