我需要名字爲X
的每個孩子名字爲AX
的所有父節點。xpath - 命名空間 - 從每個名字爲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問題:
".//gml:X//..adv:[@name='AX']"
EDDIT:X孩子的父母的名字廣告:我需要這個
parent=[AX,AX,AX]
:AX 鏈接:https://docs.python.org/2/library/xml.etree.elementtree.html 語法錯誤:無效的後裔
預期結果所有GML拿到賽= [a,a,c]
前兩個X具有相同的AX父項。那好,我需要一個重複節點的列表。
任何想法什麼是錯誤的我的第一個xpath?
你想得到'[a,c]'還是'[a,a,c]'?你想兩次匹配相同的元素? – Andersson
我想要a,a,c。不一樣的元素。有兩個元素具有相同的父項。我需要一個具有相同長度/出現元素X的列表。 – Yuli