У меня довольно большой набор больших XML-файлов, из которых я хочу извлечь некоторые данные. Я использую оценочную версию Altova XMLSpy
, в которой мне удалось получить XPATH
для работы. Однако мне нужны данные в CSV
или текстовом формате, поэтому я могу использовать его в R или Excel для дальнейшей оценки, и я не могу скопировать результаты XPATH в файл. Я обнаружил, что с помощью XQUERY
я бы мог, но мне не удалось получить XQUERY
для работы хотя бы для одного файла.Получение данных из XML с помощью 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>
Я хочу, чтобы фильтровать по конкретному значению для measurementSiteReference и получить результаты всех 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?
Спасибо! Указание пространства имен помогло, так как теперь я получаю результаты (при потере concat()). Мне все же нужно отделить результаты. – ThijsMuis