我制作了一个解析XML文件的PHP脚本.这不容易使用,我想用Java实现它.
在第一个元素内部,wfs:member我循环遍历各种元素:
foreach ($data->children("wfs", true)->member as $member) { }
Run Code Online (Sandbox Code Playgroud)
这很容易用Java做:
NodeList wfsMember = doc.getElementsByTagName("wfs:member");
for(int i = 0; i < wfsMember.getLength(); i++) { }
Run Code Online (Sandbox Code Playgroud)
我已经打开了这样的XML文件
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(WeatherDatabaseUpdater.class.getResourceAsStream("wfs.xml"));
Run Code Online (Sandbox Code Playgroud)
然后我需要从一个名为的元素中获取一个属性observerdProperty.在PHP中这很简单:
$member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->observedProperty->
attributes("xlink", true)->href
Run Code Online (Sandbox Code Playgroud)
但在Java中,我该怎么做?getElementsByTagName如果我想深入了解结构,我是否需要使用并循环它们?
在PHP中,整个脚本看起来如下.
foreach ($data->children("wfs", true)->member as $member) {
$dataType = $dataTypes[(string) $member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->observedProperty->
attributes("xlink", true)->href];
foreach ($member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->result->
children("wml2", true)->MeasurementTimeseries->
children("wml2", true)->point as $point) {
$time = $point->children("wml2", true)->MeasurementTVP->children("wml2", true)->time;
$value = $point->children("wml2", true)->MeasurementTVP->children("wml2", true)->value;
$data[$dataType][] = array($time, $value)
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个foreachI循环通过观察元素并从中获取时间和值数据.然后我将它保存在一个数组中.如果我需要按照我描述的方式遍历Java中的元素,这很难实现.我不认为是这种情况,所以有人可以建议我如何在Java中实现类似的东西吗?
如果性能不是主要问题,最简单的方法可能是XPath.使用XPath,您只需指定路径即可找到节点和属性.
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
Run Code Online (Sandbox Code Playgroud)
xpath_expression可以很简单
"string(//member/observedProperty/@href)"
Run Code Online (Sandbox Code Playgroud)
有关XPath的更多信息,W3Schools的XPath教程非常好.
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |