структура 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
|