我有一个嵌入了xml snlick的html文件,源代码粘贴在pastbin中:
<html>
<head>
<title> test֤</title>
</head>
<body>
<form name="acsForm" action="" method="post" >
<textarea rows=10 cols=80 name="xmlText"><?xml version="1.0" encoding="UTF-8"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
</samlp:Response>
</textarea>
<textarea name="2nd"> text2....</textarea>
</form>
</body>
</html>
我的任务是从HTML中提取第一个textarea
中包含的文本,这是一个XML片段。没有对原始代码段进行任何更改。我可以通过使用BeautifulSoup来获取它,但它将所有标记名称更改为小写。
答案 0 :(得分:1)
尝试使用专为XML设计的BeautifulSoup库的BeautifulStoneSoup
部分。
答案 1 :(得分:0)
也许lxml会起作用,虽然我自己从未使用它,所以我不知道做你想做的事情会有多么容易/复杂。
答案 2 :(得分:0)
(唉!为什么这么多作者似乎认为<textarea>
内容不需要HTML转义?傻瓜!)
不幸的是,BeautifulSoup 3.1没有应用(错误但常见的)浏览器修复,将<
内的&
和<textarea>
字符视为文本,而是创建真正的XML元素。 / p>
答案 3 :(得分:0)
我刚刚尝试过beautifulSoup 3.0,它对我不起作用:
xml ='<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"></samlp:Resonse>'
print BeautifulSoup.BeautifulStoneSoup(xml)
<samlp:response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
您会注意到汤已经响应更改为响应
答案 4 :(得分:0)
最后我发现pyparsing是完成任务的最佳武器:
aStart,aEnd = makeHTMLTags(“textarea”)
search = aStart + SkipTo(aEnd)(“body”)+ aEnd
saml_resp_str = search.searchString(doc)[0] .body relay_state_str = search.searchString(doc)[1] .body