如果列标记在 name
属性中具有 (group)
字符串,我想提取标记 column
的名称。我通过堆栈进行了研究,发现了一些提示,但按照这些提示我没有得到答案。更多信息如下。
示例 XML:
<datas>
<data>
<column datatype='real' default-format='c"$"#,##0;("$"#,##0)' name='[Sales]' role='measure' type='quantitative' />
<column datatype='real' default-format='c"$"#,##0;("$"#,##0)' name='[Shipping Cost]' role='measure' type='quantitative' />
<column datatype='string' name='[State]' role='dimension' semantic-role='[State].[Name]' type='nominal' />
<column datatype='string' name='[Sub-Category (group)]' role='dimension' type='nominal'>
</data>
</datas>
我的尝试:
#USING ELEMTREE, python3 to parse xml
columnfind = twbroot.findall('./datas/data')
for i in columnfind:
select= i.("//*[contains(@name,'(group)')]")
最佳答案
xml.etree
模块仅支持limited subset XPath 1.0 的版本,其中不包括 contains()
。所以你需要在 python 中进行“包含”检查:
columnfind = twbroot.findall('data/column')
for col in columnfind:
if '(group)' in col.get('name'):
print col.get('name')
或者:
cols = [e.get('name') for e in root.findall("data/column") if '(group)' in e.get('name')]
print(cols)
如果您有能力使用lxml
,它具有完整的 XPath 1.0 支持,因此您可以直接在 XPath 中进行检查:
cols = [e.get('name') for e in root.xpath("data/column[contains(@name,'(group)')]")]
print(cols)
关于python - 如果特定属性匹配,则查找并提取 xml 标签的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49002831/