【问题标题】:xml xpath expression needed in matlabmatlab中需要的xml xpath表达式
【发布时间】:2015-11-19 02:50:07
【问题描述】:

以下是我的 xml 文件的一部分

<?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>

我想通过运行一个循环然后检查该节点是否有子节点tag来获取每个节点的属性id

这是我使用以下代码实现的

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="substationv="sub_stationv="station 而无需遍历所有子节点。为此,我使用了 xpath 概念。但是,我需要一个 xpath 表达式,它不会给我所有的匹配项,而只是当前循环迭代中的匹配项(如果存在)i

我在我的 xpath 表达式 //osm/node[i][tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]] 中包含了 node[i] 部分 但这给了我所有的比赛。 我在这里想念什么?谁能给我正确的表达方式?

提前致谢!

【问题讨论】:

    标签: xml matlab xpath xml-parsing


    【解决方案1】:

    您可以尝试使用相对于当前nodes.item(i) 的 XPath,例如:

    .....
    expression = xpath.compile('self::*[tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]]');
    List = expression.evaluate(nodes.item(i), XPathConstants.NODESET);
    List.getLength;
    

    【讨论】:

    • 这正是我想要的!非常感谢。你能给我一些链接(除了 w3schools.com!),我可以在其中阅读 self 等关键字。我对 xml、xpath 很陌生,想了解更多!
    • 当然推荐官方XPath 1.0 specification参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多