Ниже часть моего файла XMLXML требуется в MATLAB
<?xml version="1.0" encoding="utf-8"?>
<osm generator="osmfilter 1.3A" version="0.6">
<node id="21295457" lat="53.4848139" lon="9.1540558" />
<node id="21316767" lat="53.0771599" lon="8.8030142" >
<tag k="bicycle" v="yes"/>
<tag k="highway" v="crossing"/>
<tag k="crossing" v="traffic_signals"/>
</node>
<node id="254069931" lat="48.9309975" lon="8.63482" >
<tag k="name" v="KV Ersingen Kirchbergsiedlung"/>
<tag k="power" v="substation"/>
</node>
<node id="254070051" lat="48.9277761" lon="8.6328671" >
<tag k="name" v="Umspannstation Ersingen Laierbergstraße"/>
<tag k="power" v="sub_station"/>
<tag k="operator" v="EnBW"/>
</node>
<node id="21929724" lat="54.8040971" lon="9.4346464" />
<node id="3444576256" lat="49.3993194" lon="11.0195838" >
<tag k="power" v="station"/>
</node>
<node id="3444576257" lat="49.4002323" lon="11.0183178" >
<tag k="power" v="station"/>
</node>
Я хотел бы получить атрибут id
каждого узла, выполнив петлю, а затем проверить, если этот узел имеет ChildNodes tag
Это я достиг, используя следующий код
xDoc = xmlread(path);
osmNode = xDoc.getDocumentElement;
nodes = osmNode.getElementsByTagName('node');
node_Matrix = zeros(nodes.getLength,3);
for i = 0 : nodes.getLength-1
node_IDs = nodes.item(i).getAttribute('id');
node_Matrix(i+1,1) = str2double(node_IDs);
if nodes.item(i).hasChildNodes
import javax.xml.xpath.*
factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expression = xpath.compile('//osm/node[i][tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]]');
List = expression.evaluate(xDoc, XPathConstants.NODESET);
List.getLength;
end
end
Теперь я хотел бы проверить, есть ли у дочерних узлов tag
каждого узла атрибут v="substation
или v="sub_station
или v="station
без перехвата всех дочерних узлов. Для этого я использовал концепцию xpath. Но, мне нужно выражение XPath, который не дает мне все матчи, но только матч (если он присутствует) внутри данного цикла итерации i
я включил часть node[i]
в моем выражении XPATH //osm/node[i][tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]]
Но это дает мне все матчей. Что мне здесь не хватает? Может кто-нибудь, пожалуйста, дайте мне правильное выражение?
Заранее благодарен!
Это именно то, что я искал! Большое спасибо. Не могли бы вы дать мне несколько ссылок (кроме w3schools.com!), Где я могу читать ключевые слова, такие как «self» и т. Д. Я довольно новичок в xml, xpath и хотел бы узнать больше! –
Разумеется, я бы рекомендовал официальную [спецификацию XPath 1.0] (http://www.w3.org/TR/xpath/) для справки – har07