使用撇号的Python XPath解析标记

时间:2011-12-10 20:30:55

标签: python parsing xpath apostrophe

我是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\\

有什么方法可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:5)

垃圾进,垃圾出您的输入格式不正确,因为它不正确地逃脱了单引号字符。许多编程语言(包括Python)使用反斜杠字符来转义字符串文字中的引号。 XML没有。你应该1)用双引号包围属性的值;或2)使用&apos;包含单引号

来自the XML spec

  

要允许属性值包含单引号和双引号,   撇号或单引号字符(')可以表示为“   &apos;“和双引号字符(”)为“&quot;”。

答案 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&apos;s misadventures'
 title='commission:Alfred&apos;s misadventures'/>

如果您使用C#等语言提供了错误的输入,则可以尝试使用将其转换为正确的对应方:

string correctXml = input.replace("\\'s", "&apos;s")

可能在Python中也有类似的方法。