|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Здраствуйте, проблема вот в чем: надо переобразовать XML-документ с такой структурой автор<database> <name>museum</name> <table> <name>ob_exhibit</name> <initialization> <insert> <field> <name>id</name> <value>6289</value> </field> <field> <name>Name</name> <value>Богоматір(ікона)</value> </field> <field> <name>Collection_Id</name> <value>Музика</value> </field> <field> <name>Autor_id</name> <value># 1</value> </field> </insert> <insert> <field> <name>id</name> <value>6040</value> </field> <field> <name>Name</name> <value>Сибір-небо</value> </field> <field> <name>Collection_Id</name> <value>Музика</value> </field> <field> <name>Autor_id</name> <value># 2</value> </field> </insert> </initialization> </table> <table> <name>ob_exhibit2</name> <initialization> <insert> <field> <name>id</name> <value>6289</value> </field> <field> <name>Material</name> <value>пластик</value> </field> </insert> <insert> <field> <name>id</name> <value>6040</value> </field> <field> <name>Material</name> <value>камінь</value> </field> </insert> </initialization> </table> </database> в такой автор<database> <ob_exhibit> <row> <id>6289</id> <Name>Богоматір(ікона)</Name> <Collection_Id>Музика</Collection_Id> <Autor_id># 1</Autor_id> <Material>пластик</Material> </row> <row> <id>6040</id> <Name>Сибір-небо</Name> <Collection_Id>Музика</Collection_Id> <Autor_id># 2</Autor_id> <Material>камінь</Material> </row> </ob_exhibit> </database> тоесть надо сгруппировать значения из двух таблиц предоставленых в виде XML по полю id и обеденить значения других тэгов ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2011, 23:22 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 11:35 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
большое спасибо, все работает ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 12:40 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
а как сделать такое преобразование: имеем файл автор<dbo.ob_exhibit id="0001" Name="Богоматір(ікона)" Collection_Id="Музика" Material="пластик"/> нужно получить автор<database> <ob_exhibit> <row> <id>001</id> <Name>Богоматір(ікона)</Name> <Collection_Id>Музика</Collection_Id> <Material>пластик</Material> </row> </ob_exhibit> </database> не знаю как обращатса к атрибутам и их значениям ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 13:24 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
вот написал такой код автор<xsl:template match="/"> <database> <xsl:element name="ob_exhibit"> <row> <xsl:element name="id"> <xsl:value-of select="@id"/> </xsl:element> <xsl:element name="Name"> <xsl:value-of select="@Name"/> </xsl:element> <xsl:element name="Collection_Id"> <xsl:value-of select="@Collection_Id"/> </xsl:element> <xsl:element name="Material"> <xsl:value-of select="@Material"/> </xsl:element> </row> </xsl:element> </database> </xsl:template> все работает, но хотелось бы чтото уневерсальнее ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 13:29 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
yurar, так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 13:55 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, спасибо, все работает как надо а как обеденить два файла? например, один файл автор<dbo.ob_exhibit id="0001" Name="Богоматір(ікона)"/> и второй файл автор<dbo.ob_exhibit2 id="0001" Material="фанера" /> надо их обеденить по значению атрибута id написал вот такой код, но он не работае. автор<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <database> <xsl:apply-templates select="dbo.ob_exhibit"/> </database> </xsl:template> <!-- --> <xsl:template match="dbo.ob_exhibit"> <xsl:element name="ob_exhibit"> <xsl:for-each select="dbo.ob_exhibit"> <xsl:variable name="var1" select="."/> <xsl:variable name="var2" select="document(sqlserver2.xml)/dbo.ob_exhibit2"/> <row> <xsl:element name="Exhibit_id"> <xsl:if test="((./@id) = @id) != 'false'"> <xsl:value-of select="@id"/> </xsl:if> </xsl:element> <xsl:element name="ExhName"> <xsl:value-of select="@Name"/> </xsl:element> <xsl:element name="Material_id"> <xsl:for-each select="$var2"> <xsl:value-of select="@Material"/> </xsl:for-each> </xsl:element> </row> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet> Что в нем не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 21:03 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
yurar, document( ' sqlserver2.xml ' ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 21:24 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, исправил, но результат также <database/> ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 21:37 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Это что за конструкция? У тя в dbo.ob_exhibit есть вложенный элемент dbo.ob_exhibit ? yurar Код: plaintext 1. 2.
Без комментариев: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 21:59 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, спасибо извиняюсь за столь глупую ошибку, я только недавно начал расбиратся с XSLT правильно будет написать автор<xsl:if test="((./@id) = @id)"> Все работает, еще раз спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2011, 23:01 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
yurarправильно будет написать автор<xsl:if test="((./@id) = @id)">Все равно не правильно. Условие всегда будет истинно, т.к. слева и справа от равенства стоит одно и то же, по разному написанное. Подозреваю, что условие должно быть такое: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 04:42 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, спасибо за полезные советы есть документ с такой структурой автор<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2010-04-12T17:12:19"> <exhibit> <id>6001</id> <Name>Богоматір(ікона)</Name> <Collection_Id>Музика</Collection_Id> <Autor_id>Autor 1</Autor_id> </exhibit> <exhibit> <id>6002</id> <Name>Сибір-небо</Name> <Collection_Id>Музика</Collection_Id> <Autor_id>Autor 2</Autor_id> </exhibit> <exhibit2> <id>6001</id> <Material_id>пластик</Material_id> </exhibit2> <exhibit2> <id>6002</id> <Material_id>дерево</Material_id> </exhibit2> </dataroot> надо обеденить содержимое тєгов exhibit и exhibit2 по значению тєга id . Написал такой код автор <xsl:key name="table2" match="/dataroot/exhibit2" use="id"/> <!-- --> <xsl:template match="/"> <database> <ob_exhibit> <xsl:apply-templates select="/database/exhibit"/> </ob_exhibit> </database> </xsl:template> <!-- --> <xsl:template match="exhibit"> <row> <xsl:for-each select="id"> <xsl:element name="Exhibit_id"> <xsl:value-of select="value"/> </xsl:element> </xsl:for-each> <xsl:for-each select="Name"> <xsl:element name="ExhName"> <xsl:value-of select="value"/> </xsl:element> </xsl:for-each> <xsl:for-each select="Collection_Id"> <xsl:element name="ExhCollection"> <xsl:value-of select="value"/> </xsl:element> </xsl:for-each> <xsl:for-each select="Autor_id"> <xsl:element name="ExhAutor"> <xsl:value-of select="value"/> </xsl:element> </xsl:for-each> <xsl:element name="Material"> <xsl:value-of select="key('table2',id)/id"/> </xsl:element> </row> </xsl:template> </xsl:stylesheet> Что в нём не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 21:13 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
yurar, Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 21:40 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Но лучше так, в примере выше просто показано, в чем ошибки: Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 21:49 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Да, и еще, если материал надо текстом, то так: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 21:52 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, большое спасибо. теперь уже понял как использовать ключи ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 22:42 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
для заданого файла автор<database> <name>museum</name> <table> <name>exhibits</name> ... </table> <table> <name>Autors</name> ... <.table> как записать, чтоб шаблон только накладывался на таблицу с названием exhibits ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 23:29 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
yurar, Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2011, 23:45 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refreg, автор <xsl:template match="/"> <database> <xsl:apply-templates select="/database/table[name='exhibits']"/> </database> </xsl:template> <!-- --> <xsl:template match="table[name='exhibits']"> ... </xsl:template> а тогда в match так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 22:18 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
Так правильно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 00:11 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refregА если несколько обработок нужно для table , используется атрибут mode И чем это лучше, чем список шаблонов с разным match? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 00:24 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
_Vasilisk_refregА если несколько обработок нужно для table , используется атрибут mode И чем это лучше, чем список шаблонов с разным match?Ок... можно без mode... только это лучше делать в другом варианте обработки, в таком: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 00:54 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
refregНо, конечно, можно эти варианты и смешать - имхо, только путаница тогдаЗависит. Нужно просто четко понимать как работает XSLT-процессор. На конструкции apply-templates формируется список узлов, а затем для каждого узла ищется первый попавшийся шаблон для его обработки. Соответственно, если нужно обработать несколько узлов, а остальные отбросить, то условие лучше писать в apply-templates. Если же узлы нужно обработать по разным правилам, то тогда условие целесообразней писать в match. В общем нужно найти оптимум между двумя вещами - минимизировать число выборок и минимизировать объем выборок ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 02:21 |
|
помогите сделать xslt или xquery переобразование с группировкой и обединением
|
|||
---|---|---|---|
#18+
всеравно я что-то делаю не так имеем файл автор<database> <name>museum</name> <table> <name>ob_exhibit</name> <initialization> <insert> <field> <name>id</name> <value>6289</value> </field> <field> <name>Name</name> <value>Богоматір(ікона)</value> </field> <field> <name>Collection_Id</name> <value>Музика</value> </field> <field> <name>Autor_id</name> <value># 1</value> </field> <field3> <name>AutorAlias</name> <value>AutorAlias 1</value> </field3> </insert> <insert> ... </initialization> </table> </database> надо получить такой автор<database> <ob_exhibit> <row> <Exhibit_id>6289</Exhibit_id> <ExhName>Богоматір(ікона)</ExhName> <ExhCollection>Музика</ExhCollection> <ExhAutor># 1</ExhAutor> </row> ... </ob_exhibit> <autors> <row> <ExhAutor># 1</ExhAutor> <ExhAutorAlias>AutorAlias 1</ExhAutorAlias> </row> ... </autors> </database> не могу понять как сделать такое переобразование ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 12:48 |
|
|
start [/forum/topic.php?fid=14&msg=37161873&tid=1332998]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 185ms |
0 / 0 |