lxml和CDATA和&

2024-04-29 15:09:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个XML,它有CDATA,其中有一个url的标记,其中包含和号。我应该使用lxml来读取这些标记,但是我得到了一个错误。在

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "src\lxml\lxml.etree.pyx", line 3228, in lxml.etree.fromstring (src\lxml\lxml.etree.c:79593)
  File "src\lxml\parser.pxi", line 1848, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:119112)
  File "src\lxml\parser.pxi", line 1729, in lxml.etree._parseDoc (src\lxml\lxml.etree.c:117670)
  File "src\lxml\parser.pxi", line 1063, in lxml.etree._BaseParser._parseUnicodeDoc (src\lxml\lxml.etree.c:111657)
  File "src\lxml\parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:105880)
  File "src\lxml\parser.pxi", line 706, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:107588)
  File "src\lxml\parser.pxi", line 635, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:106442)
  File "<string>", line 9
lxml.etree.XMLSyntaxError: EntityRef: expecting ';', line 9, column 98

我怎样才能克服这个错误?我做得对吗?我们需要用什么东西来代替吗?在

代码如下

^{pr2}$

Tags: in标记srcparserurlmost错误line
2条回答

问题是<ns:return>元素的文本(CDATA部分)的内容不是合法的XML。如果在传递给etree.fromstring之前将该文本中的&替换为&amp;,则解析应该成功。
一般来说,在CDATA部分中隐藏XML不是一个好主意;这只是它可能引起的问题的一个方面。如果您对生成XML的一方有任何影响,我建议您尝试让他们更改它。在

使用XML解析器的recover选项:

parser = etree.XMLParser(recover=True)

EstadoDoc_root = etree.fromstring(sub_element.text, parser=parser)

然后获取URL(或将其更改为您需要的任何内容):

^{pr2}$

The second URL is missing the portion of the URL that comes after & ... Is there a way to avoid this?

使用html解析器规范化和处理违规字符(注意小写标记)

from lxml import html
EstadoDoc_root = html.fromstring(sub_element)

print [x.text for x in EstadoDoc_root.xpath('//urlcaratula|//urlpdf')]

['http://G500603svGLH:8080/Facturacion/PDFServlet?docId=uR1v4VhQHvmQJLl22c1DFOLW3c4qbQ47',
 'http://G500603svGLH:8080/Facturacion/XMLServlet?docId=&uR1v4VhQHvmQJLl22c1DFOLW3c4qbQ47']

相关问题 更多 >