使用Python进行HTML编码

时间:2016-03-26 20:51:48

标签: python html xml

我正在尝试使用python将XML文件转换为HTML。我们有.css文件,其中包含输出格式的代码。我们一直在尝试运行以下代码:

def main():
    infile = open("WTExcerpt.xml", "r", encoding="utf8")
    headline=[]
    text = infile.readline()
    outfile = open("DemoWT.html", "w")
    print("<html>\n<head>\n<title>Winter's Tale</title>\n",file=outfile)
    print("<link rel='stylesheet' type='text/css' href='Shakespeare.css'>\n</head>\n<body>\n",file=outfile)               
    while text!="":
        #print(text)
        text = infile.readline()
        text = text.replace("<w>", "")

        if "<title>" in text and "</title>" in text:
            print("<h1>",text,"</h1>\n",file=outfile)
        elif text=="<head>":
            while text!="</head>":
                headline.append(text)
                print("<h3>headline<\h3>\n",file=outfile)       


main()

但我们不知道如何让Python将“text”和“headline”作为我们的变量(每次执行循环时更改)而不是纯字符串。你有什么主意吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

您似乎已经研究了如何输出变量以及一些字符串文字:

print("<h1>",text,"</h1>\n",file=outfile)

或者

print("<h1>{content}</h1>\n".format(content=text), file=outfile)

或只是

print("<h1>" + text + "</h1>\n", file=outfile)

问题更多的是您的循环如何在标题中读取 - 您需要类似标志变量(in_headline)来跟踪我们当前是否正在解析<head>标记内的文本或不。

def main():
    with open("WTExcerpt.xml", "r", encoding="utf8") as infile, open("DemoWT.html", "w") as outfile:
        print("<html>\n<head>\n<title>Winter's Tale</title>\n",file=outfile)
        print("<link rel='stylesheet' type='text/css' href='Shakespeare.css'>\n</head>\n<body>\n",file=outfile)
        in_headline = False          
        headline = ""
        for line in infile:
            text = line.replace("<w>", "")
            if "<title>" in text and "</title>" in text:
                print("<h1>",text,"</h1>\n",file=outfile)
            elif text=="<head>":
                in_headline = True
                headline = ""
            elif text == "</head>":
                in_headline = False
                print("<h3>", headline, "</h3>\n", file=outfile)
            elif in_headline:
                headline += text

但是,建议使用xml parser而不是有效地编写自己的https://docs.python.org/2/library/array.html。这很快就变成了一项复杂的练习 - 例如,如果<title>被分割成多行,或者其他任何内容与<head>标记位于同一行,则此代码将会中断。

答案 1 :(得分:0)

我看到了几个问题:

1.而不是最初将标题创建为空列表,为什么不将其设置为在循环中分配? 2.your'while'循环永远不会完成。您应该使用for循环,而不是使用while循环:

$('#foo').click();

你应该迭代文件对象而不是使用while循环 - 为1,因为你构造while循环它的方式永远不会结束,而对于2,因为它是指数级更多的“Pythonic”:)。