У меня довольно большой набор больших файлов XML, из каждого из которых я хочу извлечь некоторые данные.Я использую ознакомительную версию Altova XMLSpy
, в которой мне удалось заставить работать XPATH
.Однако мне нужны данные в CSV
или текстовом формате, поэтому я могу использовать их в R или Excel для дальнейшей оценки и не могу скопировать результаты XPATH в файл.Я обнаружил, что с помощью XQUERY
я смог бы, но мне не удалось заставить XQUERY
работать хотя бы для одного файла.
XML структурирован как:
<d2LogicalModel xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datex2.eu/schema/2_0/2_0" modelBaseVersion="2.0" xsi:schemaLocation="http://datex2.eu/schema/2_0/2_0 D:\NDW\CSS\DataGenerator\DATEXIISchema_2_0_2_0.xsd">
<payloadPublication xmlns="http://datex2.eu/schema/2_0/2_0" xsi:type="MeasuredDataPublication" lang="nl">
<publicationTime>2011-04-21T05:58:34Z</publicationTime>
<publicationCreator>
<country>nl</country>
<nationalIdentifier>NDW-CNS</nationalIdentifier>
</publicationCreator>
<measurementSiteTableReference>NDW01_MT_321</measurementSiteTableReference>
<headerInformation>
<areaOfInterest>national</areaOfInterest>
<confidentiality>restrictedToAuthorities</confidentiality>
<informationStatus>real</informationStatus>
</headerInformation>
<siteMeasurements>
<measurementSiteReference>GRT01_MORO_1002_2</measurementSiteReference>
<measurementTimeDefault>2011-04-21T05:57:00Z</measurementTimeDefault>
<measuredValue index="1">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
<measuredValue index="2">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
<measuredValue index="3">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
<measuredValue index="4">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
<measuredValue index="5">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
<measuredValue index="6">
<basicDataValue xsi:type="TrafficSpeed"/>
</measuredValue>
</siteMeasurements>
<siteMeasurements>
<measurementSiteReference>RWS01_MONIBAS_0021hrr2131ra</measurementSiteReference>
<measurementTimeDefault>2011-04-21T05:57:00Z</measurementTimeDefault>
<measuredValue index="1">
<basicDataValue xsi:type="TrafficFlow">
<time>2011-04-21T05:56:00Z</time>
<vehicleFlow>900</vehicleFlow>
</basicDataValue>
</measuredValue>
<measuredValue index="2">
<basicDataValue xsi:type="TrafficSpeed">
<numberOfInputValuesUsed>60</numberOfInputValuesUsed>
<standardDeviation>0</standardDeviation>
<time>2011-04-21T05:56:00Z</time>
<averageVehicleSpeed>115</averageVehicleSpeed>
</basicDataValue>
</measuredValue>
<measuredValue index="3">
<basicDataValue xsi:type="TrafficFlow">
<time>2011-04-21T05:56:00Z</time>
<vehicleFlow>1020</vehicleFlow>
</basicDataValue>
</measuredValue>
<measuredValue index="4">
<basicDataValue xsi:type="TrafficSpeed">
<numberOfInputValuesUsed>60</numberOfInputValuesUsed>
<standardDeviation>0</standardDeviation>
<time>2011-04-21T05:56:00Z</time>
<averageVehicleSpeed>104</averageVehicleSpeed>
</basicDataValue>
</measuredValue>
</siteMeasurements>
Я хочу отфильтровать определенное значение для measureSiteReference и получить результаты всех measuredValue
с basicDataValue
для TrafficFlow
, предпочтительно в формате:
index, value, timestamp
1, 900, 05:56:00
3, 1020, 05:56:00
У меня есть следующий XPATH:
//text()[contains(.,"GEO01_Z_RWSTI1011")]/parent::*/parent::*/descendant::measuredValue[(@index)]/basicDataValue/vehicleFlow
Это дает мне результаты для одного файла, но я не могу найти способ преобразовать это XPATH
в XQUERY
.Текущий XQUERY не возвращает результатов:
let $nl := " "
for $x in doc("TrafficSpeed 20110421 0800-1559\0800_trafficspeed")/d2LogicalModel/payloadPublication/siteMeasurements
where $x/measurementSiteReference/text()[contains(.,"GEO01_Z_RWSTI1011")]
return concat($x/measurementSiteReference/measuredValue,$nl)
Как я могу получить возврат, который я хочу использовать XQUERY?