0

XMLで提供された入力に基づいて次のコードを使用してテーブルを作成していますが、これは完全に正常に機能していますが、コードに変換して動的にテーブルを作成したいので、列を追加するとコードが自動的に調整されます。現在、ハードコーディングしています。テーブルには4つの列が含まれます。これを実現するためにコードにどのような変更を加える必要があるかを提案してください。

入力XML:-

<Fixes>
CR           FA      CL                    TITLE

409452      WLAN    656885        Age out RSSI values from buffer in Beacon miss scenario  
12345,45678  BT     54567,34567   Test
379104       BT     656928        CR379104: BT doesn’t work that Riva neither sends HCI Evt for HID ACL data nor response to HCI_INQUIRY after entering into pseudo sniff subrating mode.
</Fixes>

Pythonコード

crInfo = [ ]
CRlist = [ ]
CRsFixedStart=xmlfile.find('<Fixes>')
CRsFixedEnd=xmlfile.find('</Fixes>')
info=xmlfile[CRsFixedStart+12:CRsFixedEnd].strip()
for i in info.splitlines():
    index = i.split(None, 3)
    CRlist.append(index)
crInfo= CRlisttable(CRlist)
file.close()

def CRlisttable(CRlist,CRcount):
#For logging
global logString
print "\nBuilding the CRtable\n"
logString += "Building the build combo table\n"
#print "CRlist"
#print CRlist
CRstring = "<table cellspacing=\"1\" cellpadding=\"1\" border=\"1\">\n"
CRstring += "<tr>\n"
CRstring += "<th bgcolor=\"#67B0F9\" scope=\"col\">" + CRlist[0][0] + "</th>\n"
CRstring += "<th bgcolor=\"#67B0F9\" scope=\"col\">" + CRlist[0][1] + "</th>\n"
CRstring += "<th bgcolor=\"#67B0F9\" scope=\"col\">" + CRlist[0][2] + "</th>\n"
CRstring += "<th bgcolor=\"#67B0F9\" scope=\"col\">" + CRlist[0][3] + "</th>\n"
CRstring += "</tr>\n"

TEMPLATE = """
<tr>
<td><a href='http://prism/CR/{CR}'>{CR}</a></td>
<td>{FA}</td>
<td>{CL}</td>
<td>{Title}</td>
</tr>
"""
for item in CRlist[1:]:
    CRstring += TEMPLATE.format(
        CR=item[0],
        FA=item[1],
        CL=item[2],
        Title=item[3],
        )
CRstring += "\n</table>\n"
#print CRstring
return CRstring
4

2 に答える 2

3

あなたが自分でそうしようとさえしたくないように思われるので、私はこれを提供することについていくつかの予約を持っていますが、これはそれができる1つの方法を示す例です-おそらく少なくともあなたが勉強する努力に傾倒することを願ってそしてそれがあなたに手渡されているにもかかわらず、おそらくそれから少し何かを学ぶでしょう...

with open('cr_fixes.xml') as file: # get some data to process
    xmlfile = file.read()

def CRlistToTable(CRlist):
    cols = CRlist[0] # first item is header-row of col names on the first line

    CRstrings = ['<table cellspacing="1" cellpadding="1" border="1">']
    # table header row
    CRstrings.append('  <tr>')
    for col in cols:
        CRstrings.append('    <th bgcolor="#67B0F9" scope="col">{}</th>'.format(col))
    CRstrings.append('  </tr>')

    # create a template for each table row
    TR_TEMPLATE = ['  <tr>']
    # 1st col of each row is CR and handled separately since it corresponds to a link
    TR_TEMPLATE.append(
        '    <td><a href="http://prism/CR/{{{}}}">{{{}}}</a></td>'.format(*[cols[0]]*2))
    for col in cols[1:]:
        TR_TEMPLATE.append('    <td>{{}}</td>'.format(col))
    TR_TEMPLATE.append('  </tr>')
    TR_TEMPLATE = '\n'.join(TR_TEMPLATE)

    # then apply the template to all the non-header rows of CRlist
    for items in CRlist[1:]:
        CRstrings.append(TR_TEMPLATE.format(CR=items[0], *items[1:]))
    CRstrings.append("</table>")

    return '\n'.join(CRstrings) + '\n'

FIXES_START_TAG, FIXES_END_TAG = '<Fixes>, </Fixes>'.replace(',', ' ').split()
CRsFixesStart = xmlfile.find(FIXES_START_TAG) + len(FIXES_START_TAG)
CRsFixesEnd = xmlfile.find(FIXES_END_TAG)
info = xmlfile[CRsFixesStart:CRsFixesEnd].strip().splitlines()

# first line of extracted info is a blank-separated list of column names
num_cols = len(info[0].split())

# split non-blank lines of info into list of columnar data
# assuming last col is the variable-length title, comprising reminder of line
CRlist = [line.split(None, num_cols-1) for line in info if line]

# convert list into html table
crInfo = CRlistToTable(CRlist)
print crInfo

出力:

<table cellspacing="1" cellpadding="1" border="1">
  <tr>
    <th bgcolor="#67B0F9" scope="col">CR</th>
    <th bgcolor="#67B0F9" scope="col">FA</th>
    <th bgcolor="#67B0F9" scope="col">CL</th>
    <th bgcolor="#67B0F9" scope="col">TITLE</th>
  </tr>
  <tr>
    <td><a href="http://prism/CR/409452">409452</a></td>
    <td>WLAN</td>
    <td>656885</td>
    <td>Age out RSSI values from buffer in Beacon miss scenario</td>
  </tr>
  <tr>
    <td><a href="http://prism/CR/12345,45678">12345,45678</a></td>
    <td>BT</td>
    <td>54567,34567</td>
    <td>Test</td>
  </tr>
  <tr>
    <td><a href="http://prism/CR/379104">379104</a></td>
    <td>BT</td>
    <td>656928</td>
    <td>CR379104: BT doesnt work that Riva neither sends HCI Evt for HID ACL data nor 
        response to HCI_INQUIRY after entering into pseudo sniff subrating mode.</td>
  </tr>
</table>

ここに画像の説明を入力してください

于 2012-11-11T23:28:25.333 に答える
0

これはXMLファイルのようには見えません。タグのペア内のタブ区切りのCSVドキュメントのように見えます。

csv入力ファイルを解析するためのモジュールを調べてからjinja2、HTML生成を作成するためのようなテンプレートエンジンを調べることをお勧めします。

基本的に-csvを読み込み、ヘッダーの長さを確認して(列の数を指定します)、そのデータをテンプレートに渡します。テンプレート内で、csv構造をループしてHTMLを生成します。

于 2012-11-11T07:55:39.697 に答える