|
|
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
XML-фрагмент которого приведён ниже, требуется преобразовать в текстовый файл с разделителями. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Я получил текстовые значения заключенные в теги <НомерВпачке> и <НомерВмассиве>. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А вот с тегами вложенными в <ФИО> возникли затруднения. По идее, нужно в цикл по дочерним узлам тега <ПОРУЧЕНИЕ> вложить такой цикл Код: plaintext 1. 2. 3. 4. 5. Но это ничего не дало. Дальше в документе встречаются теги с гораздо более глубоким уровнем вложенности, так что хочется понять принцип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 20:13 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
правильно что не сработало, тови теги Фамилия, Имя , Отчество находятся в теге ФИО, а цикл у тебя по какому тегу? Вот такого достаточно: <xsl:for-each select="Файл/ПачкаВходящихДокументов/ПОРУЧЕНИЕ/ФИО"> <xsl:value-of select="Фамилия"/>, <xsl:value-of select="Имя"/>, <xsl:value-of select="Отчество"/>, </xsl:for-each> Общий принцип: Пиши выборку конкретного значения в отдельный шаблон, в пути укажи путь: xml: <Файл> <ПачкаВходящихДокументов> <ПОРУЧЕНИЕ> <НомерВпачке>3</НомерВпачке> <НомерВмассиве>00002</НомерВмассиве> <ФИО> <Фамилия>Иванов</Фамилия> <Имя>Иван</Имя> <Отчество>Иванович</Отчество> </ФИО> </ПОРУЧЕНИЕ> <ПОРУЧЕНИЕ> <ФИО> <Фамилия>Петров</Фамилия> <Имя>Петр</Имя> <Отчество>Петрович</Отчество> </ФИО> </ПОРУЧЕНИЕ> </ПачкаВходящихДокументов> </Файл> xsl: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:sch="http://www.ascc.net/xml/schematron"> <xsl:template match="/"> <xsl:for-each select="Файл/ПачкаВходящихДокументов/ПОРУЧЕНИЕ"> НомерВпачке = <xsl:value-of select="НомерВпачке"/>, НомерВмассиве = <xsl:value-of select="НомерВмассиве"/>, </xsl:for-each> <xsl:apply-templates select="//ПОРУЧЕНИЕ/ФИО"/> </xsl:template> <xsl:template match="//ПОРУЧЕНИЕ/ФИО"> <xsl:value-of select="Фамилия"/>, <xsl:value-of select="Имя"/>, <xsl:value-of select="Отчество"/>, </xsl:template> </xsl:stylesheet> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 09:44 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
SuSa Общий принцип: Пиши выборку конкретного значения в отдельный шаблон, в пути укажи путь: Сори :) ляпнул некрасиво. В смысле в вызови шаблон по обработке конкретного узла, а в аттрибут match передай место где искать. Запись типа : "//ПОРУЧЕНИЕ/ФИО" - обозначает, что тег (нод) ФИО находится в теге ПОРУЧЕНИЕ, который в свою очередь лежит фиг знает еще в чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 09:50 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
Спасибо. Есть ещё такая проблема: формат выходного файла получается не тот, что мне нужен. Дело в том, что тег ПОРУЧЕНИЕ повторяется в документе много раз и значения всех тегов вложенных в поручение должны быть записаны в одну строку. Получается же так - первый шаблон выводит НомерВПачке и НомерВМассиве из всех ПОРУЧЕНИЙ, затем второй шаблон также выводит все фио подряд. Получается так 1,2133, 2,34324,Иванов,Иван,Иванович,Петров,Петр,Петрович Должно быть так 1,2133,Иванов,Иван,Иванович 2,34324,,Петров,Петр,Петрович ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 11:02 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
ну ёперный театр, надо в одном месте, так и пиши в одном месте. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 12:51 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
А, ну да. Ну и последнее. Когда я ставлю запятую после <xsl:value-of select="что-то там"/>, то в выходном файле каждое значение начинает выводиться с новой строки. Если все <xsl:value-of select записать в одну строчку, то и в файл все пишется также. Как я понимаю, надо как-то указать XSLT-процессору, что пробельные символы которые есть в xsl нужно игнорировать. Но при этом вывод каждой новой итерации цикла <xsl:for-each select="ФайлПФР/ПачкаВходящихДокументов/ПОРУЧЕНИЕ_НА_ДОСТАВКУ_ПЕНСИЙ"> должен начинаться с новой строки. То есть не так 2, 00001, Иванов, Иван, Иванович, 3, 00002, Петров, Петр, Петрович, а так 2,00001,Иванов,Иван,Иванович, 3,00002,Петров,Петр,Петрович, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:37 |
|
||
|
Доступ к вложенным узлам
|
|||
|---|---|---|---|
|
#18+
<xsl:value-of select="что-то там"/><xsl:text>, </xsl:text> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 16:07 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34334952&tid=1334447]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 457ms |

| 0 / 0 |
