我是XPath的新手。我正在尝试使用XPath解析页面。我需要从标签中获取信息,但是标题中的撇号撇开了所有内容。
对于解析我使用Grab。
来自来源的标签:
<img src='somelink' border='0' alt='commission:Alfred\'s misadventures' title='commission:Alfred\'s misadventures'>
实际XPath:
g.xpath('.//tr/td/a[3]/img').get('title')
返回
commission:Alfred\\
有什么方法可以解决这个问题吗?
由于
答案 0 :(得分:5)
垃圾进,垃圾出您的输入格式不正确,因为它不正确地逃脱了单引号字符。许多编程语言(包括Python)使用反斜杠字符来转义字符串文字中的引号。 XML没有。你应该1)用双引号包围属性的值;或2)使用'
包含单引号。
来自the XML spec:
要允许属性值包含单引号和双引号, 撇号或单引号字符(')可以表示为“
'
“和双引号字符(”)为“"
”。
答案 1 :(得分:1)
由于嵌套的撇号,提供的“XML”不是一个格式良好的文档,因此无法在其上评估XPath表达式。
提供的格式不正确的文本可以更正为:
<img src="somelink"
border="0"
alt="commission:Alfred's misadventures"
title="commission:Alfred's misadventures"/>
如果有一个奇怪的要求不使用引号,那么正确的转换是:
<img src='somelink'
border='0'
alt='commission:Alfred's misadventures'
title='commission:Alfred's misadventures'/>
如果您使用C#等语言提供了错误的输入,则可以尝试使用将其转换为正确的对应方:
string correctXml = input.replace("\\'s", "'s")
可能在Python中也有类似的方法。