2016-03-29 3 views
1

私のXMLフォーマットは、私は属性のみk="power" v="substation"を持っているこれらのノードを必要とする単一のXPath式で特定の子供のすべての属性を選択するにはどうすればよいですか?

<node id="7463888842" lat="6666" lon="66666" version="6"> 
    <tag k="power" v="substation"/> 
    <tag k="voltage" v="20000"/> 
    <tag k="building" v="transformer_tower"/> 
    <tag k="substation" v="minor_distribution"/> 
</node> 
<node id="277852742" lat="6766" lon="666676" version="6"> 
    <tag k="ref" v="64268"/> 
    <tag k="name" v="Hambergen Sandstraße"/> 
    <tag k="power" v="substation"/> 
    <tag k="voltage" v="20000"/> 
    <tag k="location" v="kiosk"/> 
    <tag k="operator" v="EWE"/> 
    <tag k="frequency" v="50"/> 
    <tag k="substation" v="minor_distribution"/> 
</node> 
<node id="274965842" lat="66" lon="666" version="6"/> 
<node id="2732132642" lat="666" lon="6666" version="6"/> 
<node id="274454552" lat="6" lon="6.6" version="6""> 
    <tag k="power" v="substation"/> 
</node> 

以下のようであり、これは私が他のすべての属性(すなわち。同じノードで両方のk="_something_" and v="_something_"を必要とするマッチ。

がある場合最初の部分(k="power" v="substation"を持つすべてのノードを見つけるためには、私はこのXPath式

expression1sub = xpath.compile('self::*[tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]]'); 

を使用して、この

を使用してチェックしています
List = expression1sub.evaluate(nodes.item(i), XPathConstants.BOOLEAN); 

今私はListが真であるかどうかをチェックし、真であれば、すべてのタグに他のすべての属性が必要です。

たとえば、最初のノードのタグk="power" v="substation"が存在します。他のすべての属性(つまり、voltage 20000, building, transformer_tower, substation, minor_distribution)が必要です。

MATLABで単一のXPath式を使用してこれを達成できるかどうか教えてください。

私はこのXPathの

self::*[tag[@v="station"] or tag[@v= "substation"] or tag[@v="sub_station"]]/tag[@*] 

を使用してみましたが、残念ながらそれは動作しません。

答えて

2

このXPathは@k='power'@k='substation'の両方を持っているtag要素含むnodetagの要素のすべての属性値を選択します:あなたのサンプルXMLの場合

//node[tag[@k='power' and @v='substation']]/tag/@* 

を、これが返されます。

power 
substation 
voltage 
20000 
building 
transformer_tower 
substation 
minor_distribution 
ref 
64268 
name 
Hambergen Sandstraße 
power 
substation 
voltage 
20000 
location 
kiosk 
operator 
EWE 
frequency 
50 
substation 
minor_distribution 
power 
substation 

@k='power'@k='substation'で除外する場合は、

01あなたのサンプルXMLの場合
//node[tag[@k='power' and @v='substation']]/tag[not(@k='power' and @v='substation')]/@* 

、これが返されます。

voltage 
20000 
building 
transformer_tower 
substation 
minor_distribution 
ref 
64268 
name 
Hambergen Sandstraße 
voltage 
20000 
location 
kiosk 
operator 
EWE 
frequency 
50 
substation 
minor_distribution 

注意を両方のXPath式(本当にすべてのXPath式は)あなたのXMLへの単一のルート要素を前提としていること。

関連する問題