我正在使用 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('&', '&').str.replace('<', '<').str.replace('>', '>').str.replace("\"", """).str.replace("'", "'"))))
.otherwise(pl.lit(''))
.alias('value'),
pl.lit('''</wd:Overall_XML_Tag>''')
])
])
谁有更好的方法来处理这个问题?
找到了处理这个问题的方法。您可以使用如下所示的自定义函数:
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>''')
])
])