使用 Python Polars 转义 XML 字符

问题描述 投票:0回答:1

我正在使用 Polars 从表中构建 XML,并且我想转义 XML 字符。但是,当我尝试这样做时遇到了问题。我做的第一件事就是尝试以下操作:

import polars as pl
from xml.sax.saxutils import escape

table_raw = pl.read_sql("""SELECT * FROM mytable""", engine).lazy()

table = table_raw.select([
    pl.concat_str([
    pl.lit('''<wd:Overall_XML_Tag>''').alias('Overall_XML_header'),

    pl
    .when(pl.col('value') != None).then(pl.format('''<wd:Value_XML_Tag>{}</wd:Value_XML_Tag>''', escape(pl.col('value'))))
    .otherwise(pl.lit(''))
    .alias('value'),

    pl.lit('''</wd:Overall_XML_Tag>''') 
])
])

但是,执行此操作时,我在“'Expr'对象没有属性'replace'”的转义调用中收到错误

我能够通过执行保留字符的 .replace() 来完成以下工作,但它很混乱且麻烦,所以希望有更好的方法来处理事情。

import polars as pl
from xml.sax.saxutils import escape

table_raw = pl.read_sql("""SELECT * FROM mytable""", engine).lazy()

table = table_raw.select([
    pl.concat_str([
    pl.lit('''<wd:Overall_XML_Tag>''').alias('Overall_XML_header'),

    pl
    .when(pl.col('value') != None).then(pl.format('''<wd:Value_XML_Tag>{}</wd:Value_XML_Tag>''', pl.col('value').str.replace('&', '&amp;').str.replace('<', '&lt;').str.replace('>', '&gt;').str.replace("\"", "&quot;").str.replace("'", "&apos;"))))
    .otherwise(pl.lit(''))
    .alias('value'),

    pl.lit('''</wd:Overall_XML_Tag>''') 
])
])

谁有更好的方法来处理这个问题?

python xml python-polars
1个回答
0
投票

找到了处理这个问题的方法。您可以使用如下所示的自定义函数:

import polars as pl
from xml.sax.saxutils import escape

table_raw = pl.read_sql("""SELECT * FROM mytable""", engine).lazy()

table = table_raw.select([
    pl.concat_str([
    pl.lit('''<wd:Overall_XML_Tag>''').alias('Overall_XML_header'),

    pl
    .when(pl.col('value') != None).then(pl.format('''<wd:Value_XML_Tag>{}</wd:Value_XML_Tag>''', pl.col('value').map_elements(lambda x: escape(x))))
    .otherwise(pl.lit(''))
    .alias('value'),

    pl.lit('''</wd:Overall_XML_Tag>''') 
])
])
© www.soinside.com 2019 - 2024. All rights reserved.