私はCDATAを持つXMLを持っており、その中にアンパサンドを持つURLを持つタグがあります。私はこれらのタグを読み取るためにlxmlを使用するはずですが、私はエラーが発生しています。lxmlとCDATAと&
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
どうすればこのエラーが発生しますか?私は正しいことをしていますか? &を何かに置き換える必要がありますか?
コード問題が<ns:return>
要素のテキスト(CDATAセクション)の内容が有効なXMLではないということである
from lxml import etree
ns0_NAMESPACE = "http://webservices.online.webapp.paperless.cl"
ns0 = "{%s}" % ns0_NAMESPACE
NSMAP = {'ns0':ns0_NAMESPACE}
response="""
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:OnlineGeneration2Response xmlns:ns="http://webservices.online.webapp.cl">
<ns:return>
<![CDATA[<EstadoDoc>
<Estado>Ok<Estado>
<RutEmisor>81201000-K</RutEmisor>
<TipoDte>52</TipoDte>
<FolioM>117620901</FolioM>
<Folio>25022</Folio>
<Glosa>NO INFORMADO</Glosa>
<UrlDte>http://G500603svGLH:8080/Facturacion/XMLServlet?docId=&uR1v4VhQHvkPrUZDtY6hMg==</UrlDte>
</EstadoDoc>
<EstadoLote>
<UrlPdf>http://G500603svGLH:8080/Facturacion/PDFServlet?docId=uR1v4VhQHvmQJLl22c1DFOLW3c4qbQ47</UrlPdf>
<UrlCaratula>http://G500603svGLH:8080/Facturacion/XMLServlet?docId=&uR1v4VhQHvmQJLl22c1DFOLW3c4qbQ47</UrlCaratula>
</EstadoLote>]]>
</ns:return>
</ns:OnlineGeneration2Response>
</soapenv:Body>
</soapenv:Envelope>"""
root=etree.fromstring(response)
sub_element=root.xpath('//ns0:return',namespaces=NSMAP)
print sub_element.text
if sub_element:
sub_element=sub_element[0]
EstadoDoc_root=etree.fromstring(sub_element.text)
(小文字のタグに注意してください)に違反した文字を正規化し、処理するためのHTMLパーサを使用する方法はありますこれを避けるには?ご回答有難うございます。 – Guddu
@Guddu編集を参照してください。 – salparadise
ありがとうございます。あなたは完全にロック!これは私が進むのを助けるでしょう。しかし、1つの質問。次のコードを実行すると、なぜ[なし]が表示されますか? [EstadoDoc_root.xpath( '// estado')のxのx.textを印刷します。 – Guddu