关于python:通过xpath选择xml节点,属性值包含撇号 | 珊瑚贝

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 表达式正确,因为 被原样解释。

顺便说一句,如果要检查 font-family 是否包含给定的字符串,请使用 contains() XPath 函数和 xpath 方法:

1
2
xPath = ‘//g[contains(@font-family,”BentonSans Medium”)]’
print(root.xpath(xPath))

输出

1
[<Element g at 0x7f2093612108>]

示例代码获取所有 g 元素,其 font-family 属性值包含 BentonSans Medium 字符串。

我不知道为什么 findall 方法不适用于 contains(),但是 xpath 似乎更灵活,我建议改用这种方法。

  • 非常感谢你。你的小语法调整做到了!


来源:https://www.codenong.com/41207446/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9778.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?