名前X
のすべての子からAX
という名前のすべての親ノードが必要です。xpath - namespaces - 名前がBのすべての子から名前Aのすべての親を取得
その後、ノードタイプの値を取得する必要があります。
私はDynamoでPython 2.7とElementTreeで作業しています。だから私はlxmlを使用することはできません!
のxml:
<main
xmlns="http://www.adv-online.de/namespaces/adv/gid/6.0"
xmlns:adv="http://www.adv-online.de/namespaces/adv/gid/6.0"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:ows="http://www.opengis.net/ows"
xmlns:wfs="http://www.adv-online.de/namespaces/adv/gid/wfs"
xmlns:wfsext="http://www.adv-online.de/namespaces/adv/gid/wfsext"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ogc="http://www.adv-online.de/namespaces/adv/gid/ogc"
xsi:schemaLocation="http://www.adv-online.de/namespaces/adv/gid/6.0 NAS-Operationen.xsd">
<AX>
<gml:node>
<gml:X></gml:X>
<gml:X></gml:X>
<type>a</type>
</gml:node>
</AX>
<AX>
<gml:node>
<gml:D></gml:D>
<adv:type>b</adv:type>
</gml:node>
</AX>
<AX>
<gml:node>
<gml:X></gml:X>
<adv:type>c</adv:type>
</gml:node>
</AX>
</main>
コード:
import clr
import sys
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
path="file.xml"
uniStr = unicode(open(path, 'r').read())
fixed = uniStr.encode('ascii', 'replace')
fixed.decode('utf-8', 'replace')
tree = ET.ElementTree(ET.fromstring(fixed))
root = tree.getroot()
xpathstr=".//gml:X//..adv:[@name='AX']"
xpathchild=".//adv:type"
ns = {"":"http://www.adv-online.de/namespaces/adv/gid/6.0", "adv":"http://www.adv-online.de/namespaces/adv/gid/6.0","gco":"http://www.isotc211.org/2005/gco",
"gmd":"http://www.isotc211.org/2005/gmd","gml":"http://www.opengis.net/gml/3.2","ows":"http://www.opengis.net/ows",
"wfs":"http://www.adv-online.de/namespaces/adv/gid/wfs","wfsext":"http://www.adv-online.de/namespaces/adv/gid/wfsext","xsd":"http://www.w3.org/2001/XMLSchema",
"xlink":"http://www.w3.org/1999/xlink","xsi":"http://www.w3.org/2001/XMLSchema-instance","ogc":"http://www.adv-online.de/namespaces/adv/gid/ogc"}
parent = root.findall(xpathstr,ns)
for x in parent:
match.append(x.findall(xpathchild,ns))
print parent,match
のxpath:
: 私は最初のxpathに問題がありますEDDIT:Xの子供の名前ADVを持つ親:AX リンク:https://docs.python.org/2/library/xml.etree.elementtree.html にSyntaxError:無効な子孫
期待される結果:
parent=[AX,AX,AX]
私はこれを必要とする:すべてのGMLからGET一致= [a、a、c]
最初の2つのXは同じAXの親を持ちます。それは大丈夫、私は重複したノードを持つリストが必要です。
私の最初のxpathに何か問題がありますか?
'[a、c]'または '[a、a、c]'を取得しますか?あなたは同じ要素を2回マッチさせたいですか? – Andersson
私はa、a、cが欲しいです。同じ要素ではありません。同じ親を持つ2つの要素があります。同じ長さ/要素Xの出現数のリストが必要です。 – Yuli