Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSS解析器+;XHTML生成器,需要建议_Python_Css_Parsing_Xhtml - Fatal编程技术网

Python CSS解析器+;XHTML生成器,需要建议

Python CSS解析器+;XHTML生成器,需要建议,python,css,parsing,xhtml,Python,Css,Parsing,Xhtml,伙计们,我需要开发一个能够满足以下要求的工具: 输入:包含标题部分中CSS规则的XHTML文档 输出:在标记属性中计算CSS规则的XHTML文档 下面是说明我想要的行为的最好方法 输入示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <st

伙计们,我需要开发一个能够满足以下要求的工具:

  • 输入:包含
    标题
    部分中CSS规则的XHTML文档
  • 输出:在标记属性中计算CSS规则的XHTML文档
  • 下面是说明我想要的行为的最好方法

    输入示例:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
      <style type="text/css" media="screen">
        .a { color: red; }
            p { font-size: 12px; }
      </style>
    </head>
    <body>
        <p class="a">Lorem Ipsum</p>
        <div class="a">
             <p>Oh hai</p>
        </div>
    </body>
    </html>
    
    
    .a{颜色:红色;}
    p{font size:12px;}
    Lorem Ipsum

    哦,海

    示例输出:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <body>
        <p style="color: red; font-size: 12px;">Lorem Ipsum</p>
        <div style="color: red;">
             <p style="font-size: 12px;">Oh hai</p>
        </div>
    </body>
    </html>
    
    
    Lorem Ipsum

    哦海

    哪些工具/库最适合此类任务? 我不确定BeautifulSoup和cssutils是否有能力做到这一点

    Python不是必需的。
    如有任何建议,我们将不胜感激

    取决于CSS的复杂程度。如果是元素(“p{}”、“a{}”)、ID/类(#test{})的简单问题,那么可能最容易使用正则表达式。您必须有一个来查找所有样式定义,然后解析它们,然后使用更多正则表达式来查找匹配的标记实例

    例如,如果您发现有标记的样式,可以使用如下正则表达式:

    <a\b[^>]*>(.*?)</a>
    
    ]*>(**?)
    
    要获得它们,则必须进行替换以添加样式。当然,您希望正则表达式接受标记作为参数(本例中为a标记)

    如果你选择了子元素或其他元素,而不仅仅是根元素和ID/类,这可能会很快变得一团糟

    考虑从定义内联样式开始?

    试试premailer

    更多信息:
    虽然我不知道有什么具体的工具可以做到这一点,但以下是我将采取的基本方法:

    作为xml文档加载
    从文档中提取css类和样式
    对于每对css类和样式
    从css类构造xpath查询
    对于每个匹配节点
    设置该类的样式属性
    从文档中删除样式节点
    将文档转换为字符串

    存在一个

    是否确实要执行此操作?我看不出这有什么有用的原因……我的第一个问题是为什么?我想让你了解一下这方面的背景:)。简而言之,它是关于发送CSS驱动的电子邮件。因此,它是一种使开发此类消息更容易的工具。不,这与发送垃圾邮件无关。我们之所以一次又一次地将CSS规则添加到元素本身,而不是让它们在邮件中出现一次,是因为我们使用了一些第三方邮件软件。我不确定,甚至不感兴趣,如果它是发送者或客户端的错误,但例如,Gmail客户端有非常差的CSS支持,除非你把属性中的样式。