0

タグ内のすべてのリンクを読み取ってから、そこからwikiリンクを作成しようとしています...基本的に、xmlファイルから各リンクを読み取り、最後の単語でwikiリンクを作成します(以下を参照してください)。リンクの最後の言葉)...何らかの理由で次のエラーが発生しているため、私が見逃しているものを提案してください

http://wiki.build.com/ca_builds/CIT (last word is CIT)
http://wiki.build.com/ca_builds/1.2_Archive(last word is 1.2_Archive)

入力XML:-

<returnLink>
    http://wiki.build.com/ca_builds/CIT
    http://wiki.build.com/ca_builds/1.2_Archive
</returnLink>

PYTHONコード

 def getReturnLink(xml):
"""Collects the link to return to the PL home page from the config file."""
if xml.find('<returnLink>') == -1:
    return None
else:
    linkStart=xml.find('<returnLink>')
    linkEnd=xml.find('</returnLink>')
    link=xml[linkStart+12:linkEnd].strip()
    link = link.split('\n')
    #if link.find('.com') == -1:
        #return None
    for line in link:
        line = line.strip()
        print "LINE"
        print line
        lastword = line.rfind('/') + 1
        line = '['+link+' lastword]<br>'
        linklis.append(line)
    return linklis

出力:-

   line = '['+link+' lastword]<br>'
 TypeError: cannot concatenate 'str' and 'list' objects

期待される出力:-

CIT  (this will point to http://wiki.build.com/ca_builds/CIT
1.2_Archive (this will point to http://wiki.build.com/ca_builds/1.2_Archive 1.2_Archive)
4

3 に答える 3

1

Python標準ライブラリにはxmlパーサーがあります。<returnLink>URLで複数の要素とUnicode単語をサポートすることもできます。

import posixpath
import urllib
import urlparse
from xml.etree import cElementTree as etree

def get_word(url):
    basename = posixpath.basename(urlparse.urlsplit(url).path)
    return urllib.unquote(basename).decode("utf-8")

urls = (url.strip()
        for links in etree.parse(input_filename_or_file).iter('returnLink')
        for url in links.text.splitlines())
wikilinks = [u"[{} {}]".format(url, get_word(url))
             for url in urls if url]
print(wikilinks)

注:内部でUnicodeを使用してください。ファイルへの書き込み時など、外部と通信するためにのみテキストをバイトに変換します。

[http://wiki.build.com/ca_builds/CIT#some-fragment CIT]
[http://wiki.build.com/ca_builds/Unicode%20%28%E2%99%A5%29 Unicode (♥)]
于 2012-11-11T11:39:06.243 に答える
0

あなたの質問を理解するのに少し苦労していますが、リンクの最後の「/」文字の後に文字列を返したいようです。これは逆検索で行うことができます。

return link[link.rfind('/') + 1:]
于 2012-11-11T02:57:04.970 に答える
0

XMLを手動で解析する代わりに、次のようなライブラリを使用しますlxml

>>> s = """<returnLink>
...     http://wiki.build.com/ca_builds/CIT
...     http://wiki.build.com/ca_builds/1.2_Archive
... </returnLink>"""
>>> from lxml import etree
>>> xml_tree = etree.fromstring(s)
>>> links = xml_tree.text.split()
>>> for i in links:
...    print '['+i+']'+i[i.rfind('/')+1:]
...
[http://wiki.build.com/ca_builds/CIT]CIT
[http://wiki.build.com/ca_builds/1.2_Archive]1.2_Archive

wikilinksが何を意味するのかわかりませんが、上記は文字列を解析する方法についてのアイデアを与えるはずです。

于 2012-11-11T03:59:51.527 に答える