xml - 如何查找 XML API 响应中的节点数?
问题描述
我在测试
这是 API 端点:http://ergast.com/api/f1
查找特定季节返回的数字 (numberOfCircuits) 的最佳方法是什么?
特定季节的响应是:
<MRData xmlns="http://ergast.com/mrd/1.4" series="f1" url="http://ergast.com/api/f1/1950" limit="30" offset="0" total="7">
<RaceTable season="1950">
<Race season="1950" round="1" url="http://en.wikipedia.org/wiki/1950_British_Grand_Prix">
<RaceName>British Grand Prix</RaceName>
<Circuit circuitId="silverstone" url="http://en.wikipedia.org/wiki/Silverstone_Circuit">
<CircuitName>Silverstone Circuit</CircuitName>
<Location lat="52.0786" long="-1.01694">
<Locality>Silverstone</Locality>
<Country>UK</Country>
</Location>
</Circuit>
<Date>1950-05-13</Date>
</Race>
<Race season="1950" round="2" url="http://en.wikipedia.org/wiki/1950_Monaco_Grand_Prix">
<RaceName>Monaco Grand Prix</RaceName>
<Circuit circuitId="monaco" url="http://en.wikipedia.org/wiki/Circuit_de_Monaco">
<CircuitName>Circuit de Monaco</CircuitName>
<Location lat="43.7347" long="7.42056">
<Locality>Monte-Carlo</Locality>
<Country>Monaco</Country>
</Location>
</Circuit>
<Date>1950-05-21</Date>
</Race>
<Race season="1950" round="3" url="http://en.wikipedia.org/wiki/1950_Indianapolis_500">
<RaceName>Indianapolis 500</RaceName>
<Circuit circuitId="indianapolis" url="http://en.wikipedia.org/wiki/Indianapolis_Motor_Speedway">
<CircuitName>Indianapolis Motor Speedway</CircuitName>
<Location lat="39.795" long="-86.2347">
<Locality>Indianapolis</Locality>
<Country>USA</Country>
</Location>
</Circuit>
<Date>1950-05-30</Date>
</Race>
<Race season="1950" round="4" url="http://en.wikipedia.org/wiki/1950_Swiss_Grand_Prix">
<RaceName>Swiss Grand Prix</RaceName>
<Circuit circuitId="bremgarten" url="http://en.wikipedia.org/wiki/Circuit_Bremgarten">
<CircuitName>Circuit Bremgarten</CircuitName>
<Location lat="46.9589" long="7.40194">
<Locality>Bern</Locality>
<Country>Switzerland</Country>
</Location>
</Circuit>
<Date>1950-06-04</Date>
</Race>
<Race season="1950" round="5" url="http://en.wikipedia.org/wiki/1950_Belgian_Grand_Prix">
<RaceName>Belgian Grand Prix</RaceName>
<Circuit circuitId="spa" url="http://en.wikipedia.org/wiki/Circuit_de_Spa-Francorchamps">
<CircuitName>Circuit de Spa-Francorchamps</CircuitName>
<Location lat="50.4372" long="5.97139">
<Locality>Spa</Locality>
<Country>Belgium</Country>
</Location>
</Circuit>
<Date>1950-06-18</Date>
</Race>
<Race season="1950" round="6" url="http://en.wikipedia.org/wiki/1950_French_Grand_Prix">
<RaceName>French Grand Prix</RaceName>
<Circuit circuitId="reims" url="http://en.wikipedia.org/wiki/Reims-Gueux">
<CircuitName>Reims-Gueux</CircuitName>
<Location lat="49.2542" long="3.93083">
<Locality>Reims</Locality>
<Country>France</Country>
</Location>
</Circuit>
<Date>1950-07-02</Date>
</Race>
<Race season="1950" round="7" url="http://en.wikipedia.org/wiki/1950_Italian_Grand_Prix">
<RaceName>Italian Grand Prix</RaceName>
<Circuit circuitId="monza" url="http://en.wikipedia.org/wiki/Autodromo_Nazionale_Monza">
<CircuitName>Autodromo Nazionale di Monza</CircuitName>
<Location lat="45.6156" long="9.28111">
<Locality>Monza</Locality>
<Country>Italy</Country>
</Location>
</Circuit>
<Date>1950-09-03</Date>
</Race>
</RaceTable>
</MRData>
解决方案
所需进口;
import io.restassured.RestAssured;
import io.restassured.path.xml.XmlPath;
import io.restassured.response.Response;
import java.util.List;
您应该XmlPath
在 RestAssured 中使用来访问和处理 xml 响应。
Response response =
RestAssured
.when()
.get("http://ergast.com/api/f1")
.then()
.extract()
.response();
XmlPath xmlPath = response.xmlPath();
int numberOfCircuits = xmlPath.getList("MRData.RaceTable.Race.Circuit").size();
numberOfCircuits
将返回响应中的电路节点数。
您可以从xmlPath
.
或者你可以在没有清单的情况下得到它;
int numberOfCircuits = xmlPath.get("MRData.RaceTable.Race.Circuit.size()");
推荐阅读
- php - 如何在 laravel 8 中使用 json web token (jwt) 进行多重身份验证?
- google-cloud-platform - Google Cloud Vision API 对象检测模型在 Raspberry Pi 上出现总线错误
- gtsummary - 将 tbl_summary 中的频率和百分比拆分为两个单独的列
- python - 合并后python pandas更改顺序和列名
- apache-flink - Apache Flink 在 UI 中显示自定义指标,但普罗米修斯指标报告器没有抓取它们
- laravel - Laravel:如何保存到两个表中,但是,第一个表的 id 将作为外部 id 保存到第二个表中
- c++ - 子聚合的指定初始化器是否需要花括号?
- clickhouse - 获取 ClickHouse 表前 n 行的校验和(cityHash64)
- blazor - 有什么方法可以禁止组件使用“ShouldRender”进行渲染,但允许其子组件在他们认为合适的时候重新渲染?
- r - 用 R 对 A 行的 A 元素和 A 矩阵的 A 列进行排序