Select xml node by xpath with attribute value containing apostroph
我正在尝试从给定的 XML 文件中提取一些数据。因此,我必须通过它们的属性值来选择一些特定的节点。我的 XML 如下所示:
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8" ?> <svg ....> .... <g font-family="'BentonSans Medium'" font-size="12"> <text>bla bla bla</text> .... </g> .... </svg> |
我已尝试转义值中的撇号,但无法正常工作。
1 2 3 4 5 6 7 | from lxml import etree as ET tree = ET.parse("file.svg") root = tree.getroot() xPath =".//g[@font-family='BentonSans Medium]" print(root.findall(xPath)) |
我总是遇到这种错误:
1 2 | File"C:\\Python34\\lib\\site-packages\\lxml\\_elementpath.py", line 214, in prepare_predicate raise SyntaxError("invalid predicate") |
有人知道如何使用 XPath 选择这些节点吗?
试试这个:
1 | xPath =".//g[@font-family="'BentonSans Medium'"]" |
你的代码失败了,因为你没有放单引号:
1 | xPath =".//g[@font-family='BentonSans Medium]" |
应该在最后一个
之后
1 | xPath =".//g[@font-family='BentonSans Medium']" |
但它不会使 XPath 表达式正确,因为
顺便说一句,如果要检查
1 2 | xPath = '//g[contains(@font-family,"BentonSans Medium")]' print(root.xpath(xPath)) |
输出
1 | [<Element g at 0x7f2093612108>] |
示例代码获取所有
我不知道为什么