Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скопировать часть нод второго порядка другой xml, фильтр по тексту одной из нод 
V
    Опции темы
leniviy
Дата 16.11.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



структура xml файла такая:
Код

<root>
<CallEventRecord>
    <ggsnPDPRecord>
        <servedMSISDN>txt</servedMSISDN>
        ...
    </ggsnPDPRecord>
</CallEventRecord>

<CallEventRecord>
    <sgsnPDPRecord>
        <servedMSISDN>txt</servedMSISDN>
        ...
    </sgsnPDPRecord>
</CallEventRecord>

</root>


Мне нужно выбрать ggsnPDPRecord, но не sgsnPDPRecord, у которых servedMSISDN = '91 14 97 85 03 91 F0'
Я написал некий xslt, но чувствую, что не правильно:
Код

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="node()[(. != /) and (.. = /) and (name() != 'CallEventRecord' or not(ggsnPDPRecord))]"/>
  <xsl:template match="node()[(. != /) and (.. = /) and not(ggsnPDPRecord/servedMSISDN/text()[. = '91 14 97 85 03 91 F0'])]"/>

</xsl:stylesheet>

Это переработанный пример отсюда .
(. != /) and (.. = /) - чтобы матчилась нода только второго порядка.
Мне выносит мозг то, что нужное мне условие надо отрицать. Если бы можно было забить положительное условие в 
<xsl:apply-templates select="..."/>, было бы удобнее, но я не знаю, как.

small.xml:
Код

<root>
<CallEventRecord>
    <sgsnPDPRecord>
        <recordType><ggsnPDPRecord/></recordType>
        <servedIMSI>22 08 41 11 85 08 38 F0</servedIMSI>
        <ggsnAddress>
            <iPBinaryAddress>
                <iPBinV4Address>8A BC 02 01</iPBinV4Address>
            </iPBinaryAddress>
        </ggsnAddress>
        <chargingID>1471674127</chargingID>
        <sgsnAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>8A BC 03 03</iPBinV4Address>
                </iPBinaryAddress>
            
        </sgsnAddress>
        <accessPointNameNI>event.swisscom.ch</accessPointNameNI>
        <pdpType>01 21</pdpType>
        <servedPDPAddress>
            <iPAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>0A 71 04 A7</iPBinV4Address>
                </iPBinaryAddress>
            </iPAddress>
        </servedPDPAddress>
        <dynamicAddressFlag><true/></dynamicAddressFlag>
        <listOfTrafficVolumes>
            <ChangeOfCharCondition>
                <qosNegotiated>
                    <umtsQosInformation>02 13 62 1F 73 96 40 68 74 62 10 40</umtsQosInformation>
                </qosNegotiated>
                <dataVolumeGPRSUplink>0</dataVolumeGPRSUplink>
                <dataVolumeGPRSDownlink>0</dataVolumeGPRSDownlink>
                <changeCondition><recordClosure/></changeCondition>
                <changeTime>12 08 14 23 46 57 2B 02 00</changeTime>
            </ChangeOfCharCondition>
        </listOfTrafficVolumes>
        <recordOpeningTime>12 08 14 23 46 57 2B 02 00</recordOpeningTime>
        <duration>0</duration>
        <causeForRecClosing><normalRelease/></causeForRecClosing>
        <recordExtensions>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.2.1</identifier>
                <significance><true/></significance>
                <information>
                    16 10 2A 73 74 2D 74 2D 65 76 65 6E 74 2E 73 77 
                    69 73
                </information>
            </ManagementExtension>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.7.1</identifier>
                <significance><true/></significance>
                <information>04 08 53 89 18 30 40 39 34 20</information>
            </ManagementExtension>
        </recordExtensions>
        <localSequenceNumber>262970429</localSequenceNumber>
        <apnSelectionMode><mSorNetworkProvidedSubscriptionVerified/></apnSelectionMode>
        <servedMSISDN>91 14 97 85 03 91 F0</servedMSISDN>
        <chargingCharacteristics>04 00</chargingCharacteristics>
    </sgsnPDPRecord>
</CallEventRecord>
<CallEventRecord>
    <ggsnPDPRecord>
        <recordType><ggsnPDPRecord/></recordType>
        <servedIMSI>22 08 41 11 85 08 38 F0</servedIMSI>
        <ggsnAddress>
            <iPBinaryAddress>
                <iPBinV4Address>8A BC 02 01</iPBinV4Address>
            </iPBinaryAddress>
        </ggsnAddress>
        <chargingID>1471674327</chargingID>
        <sgsnAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>8A BC 03 03</iPBinV4Address>
                </iPBinaryAddress>
            
        </sgsnAddress>
        <accessPointNameNI>event.swisscom.ch</accessPointNameNI>
        <pdpType>01 21</pdpType>
        <servedPDPAddress>
            <iPAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>0A 71 00 8A</iPBinV4Address>
                </iPBinaryAddress>
            </iPAddress>
        </servedPDPAddress>
        <dynamicAddressFlag><true/></dynamicAddressFlag>
        <listOfTrafficVolumes>
            <ChangeOfCharCondition>
                <qosNegotiated>
                    <umtsQosInformation>02 13 62 1F 73 96 40 68 74 62 10 40</umtsQosInformation>
                </qosNegotiated>
                <dataVolumeGPRSUplink>0</dataVolumeGPRSUplink>
                <dataVolumeGPRSDownlink>0</dataVolumeGPRSDownlink>
                <changeCondition><recordClosure/></changeCondition>
                <changeTime>12 08 14 23 48 28 2B 02 00</changeTime>
            </ChangeOfCharCondition>
        </listOfTrafficVolumes>
        <recordOpeningTime>12 08 14 23 48 28 2B 02 00</recordOpeningTime>
        <duration>0</duration>
        <causeForRecClosing><normalRelease/></causeForRecClosing>
        <recordExtensions>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.2.1</identifier>
                <significance><true/></significance>
                <information>
                    16 10 2A 73 74 2D 74 2D 65 76 65 6E 74 2E 73 77 
                    69 73
                </information>
            </ManagementExtension>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.7.1</identifier>
                <significance><true/></significance>
                <information>04 08 53 89 18 30 40 39 34 20</information>
            </ManagementExtension>
        </recordExtensions>
        <localSequenceNumber>262971067</localSequenceNumber>
        <apnSelectionMode><mSorNetworkProvidedSubscriptionVerified/></apnSelectionMode>
        <servedMSISDN>91 14 97 85 03 91 F0</servedMSISDN>
        <chargingCharacteristics>04 00</chargingCharacteristics>
    </ggsnPDPRecord>
</CallEventRecord>
<CallEventRecord>
    <ggsnPDPRecord>
        <recordType><ggsnPDPRecord/></recordType>
        <servedIMSI>22 08 31 13 27 18 10 F0</servedIMSI>
        <ggsnAddress>
            <iPBinaryAddress>
                <iPBinV4Address>8A BC 02 01</iPBinV4Address>
            </iPBinaryAddress>
        </ggsnAddress>
        <chargingID>1471649563</chargingID>
        <sgsnAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>97 02 E0 41</iPBinV4Address>
                </iPBinaryAddress>
            
        </sgsnAddress>
        <accessPointNameNI>event.swisscom.ch</accessPointNameNI>
        <pdpType>01 21</pdpType>
        <servedPDPAddress>
            <iPAddress>
                <iPBinaryAddress>
                    <iPBinV4Address>0A 71 CE 28</iPBinV4Address>
                </iPBinaryAddress>
            </iPAddress>
        </servedPDPAddress>
        <dynamicAddressFlag><true/></dynamicAddressFlag>
        <listOfTrafficVolumes>
            <ChangeOfCharCondition>
                <qosNegotiated>
                    <umtsQosInformation>02 1B 62 1F 73 96 40 68 74 63 10 40</umtsQosInformation>
                </qosNegotiated>
                <dataVolumeGPRSUplink>0</dataVolumeGPRSUplink>
                <dataVolumeGPRSDownlink>0</dataVolumeGPRSDownlink>
                <changeCondition><recordClosure/></changeCondition>
                <changeTime>12 08 14 23 48 32 2B 02 00</changeTime>
            </ChangeOfCharCondition>
        </listOfTrafficVolumes>
        <recordOpeningTime>12 08 14 21 48 32 2B 02 00</recordOpeningTime>
        <duration>7200</duration>
        <causeForRecClosing><timeLimit/></causeForRecClosing>
        <recordSequenceNumber>1</recordSequenceNumber>
        <recordExtensions>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.2.1</identifier>
                <significance><true/></significance>
                <information>
                    16 10 2A 73 74 2D 74 2D 65 76 65 6E 74 2E 73 77 
                    69 73
                </information>
            </ManagementExtension>
            <ManagementExtension>
                <identifier>1.2.840.113533.4.10.1.7.1</identifier>
                <significance><true/></significance>
                <information>04 08 53 46 23 10 50 54 12 60</information>
            </ManagementExtension>
        </recordExtensions>
        <localSequenceNumber>262971094</localSequenceNumber>
        <apnSelectionMode><mSorNetworkProvidedSubscriptionVerified/></apnSelectionMode>
        <servedMSISDN>91 14 97 23 75 58 F7</servedMSISDN>
        <chargingCharacteristics>04 00</chargingCharacteristics>
    </ggsnPDPRecord>
</CallEventRecord>
</root>



Это сообщение отредактировал(а) leniviy - 16.11.2012, 18:23
PM MAIL   Вверх
diadiavova
Дата 17.11.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(leniviy @  16.11.2012,  19:18 Найти цитируемый пост)
(. != /) and (.. = /) - чтобы матчилась нода только второго порядка.

А так не пробовал? 
/node()


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
leniviy
Дата 17.11.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Цитата(diadiavova @  17.11.2012,  15:34 Найти цитируемый пост)
А так не пробовал? 
/node() 

Пробовал, не получилось. Это условие всегда истина, в отрыве от текущей ноды.

PM MAIL   Вверх
diadiavova
Дата 17.11.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



leniviy, сделал упрощенный пример, для своего случая переработай, думаю это будет несложно
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
  <level1>
    <level2>
      fd;lgjk
    </level2>
  </level1>
  <level1-exclude>
    <level2>
      fd;lgjk
    </level2>
  </level1-exclude>
</root>
Из этого документа копируем все кроме элементов level1-exclude и их потомков
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/*">
    <xsl:copy>
        <xsl:copy-of select="@* | node()[name() != 'level1-exclude']"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Результат
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
  <level1>
    <level2>
      fd;lgjk
    </level2>
  </level1>
  
</root>


Добавлено через 14 минут и 54 секунды
И кстати вот такой вариант тоже работает
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:template match="/*/node()[name() != 'level1']"/>
</xsl:stylesheet>

То есть надо было указать условие не /node(), а /*/node()


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
leniviy
Дата 20.11.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Есть ли разница между 
Код

<xsl:template match="/*">
    <xsl:copy>
        <xsl:copy-of select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

и
Код

  <xsl:template match="/">
    <xsl:copy-of select="@* | node()"/>
  </xsl:template>

?


Это сообщение отредактировал(а) leniviy - 20.11.2012, 10:45
PM MAIL   Вверх
diadiavova
Дата 20.11.2012, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



leniviy, в первом случае обработка начинается с корневого элемента, который копируется сначала сам, а потом в него вставляются дочерние узлы. Во втором обработка начинается с узла document и копируются все его потомки. Результаты могут различаться к примеру в тех случаях, когда корневому элементу исходного документа предшествуют комментарии или инструкции приложений, первый вариант их не скопирует.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1643 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.