Python 使用多行属性解析XML
我正在创建一个python脚本来修改xml文件,假设我有这样的标记:Python 使用多行属性解析XML,python,python-3.x,xml,parsing,lxml,Python,Python 3.x,Xml,Parsing,Lxml,我正在创建一个python脚本来修改xml文件,假设我有这样的标记: <z:row MGFF_SCRIPT=' If Variabili("UFFICIOPA") = "" Then elemento = "0000000" Else elemento = Variabili("UFFI
<z:row MGFF_SCRIPT='
If Variabili("UFFICIOPA") = "" Then
elemento = "0000000"
Else
elemento = Variabili("UFFICIOPA")
End If
'/>
我需要访问MGFF_SCRIPT属性的值,修改它,然后将其插入相同的位置;问题是当我获取属性(Element.get(key))的值并将其保存在py字符串中时:它没有换行/缩进,它是一个单行字符串,因此,当我将修改后的值放入属性并创建新xml时,我将使用属性MGFF_脚本,它的内容写在单行中。因为内容是脚本,所以这种情况会产生很多问题。
如何解析保留换行符/缩进的属性内容?在XML规范中,XML解析器需要执行一个非常不幸的规则,这意味着属性值中的换行符被空格替换。除非您的XML解析器有一个选项来禁止此操作(大多数都没有,因为规范要求这样做),否则您只能坚持使用它。在XML规范中,XML解析器必须执行的规则非常不幸,这意味着属性值中的换行符被空格替换。除非您的XML解析器有一个选项来禁止此操作(大多数都没有,因为规范需要它),否则您将无法使用它。正如@tdelaney所说,我们可以先替换它,修改它,然后恢复它
import re
html = '''
<z:row MGFF_SCRIPT='
If Variabili("UFFICIOPA") = "" Then
elemento = "0000000"
Else
elemento = Variabili("UFFICIOPA")
End If
'/>
'''
# replace
blocks = re.compile("'[^']+'").findall(html)
for block in blocks:
html = html.replace(block,block.replace('\n',' '))
print (html)
# restore
blocks = re.compile("'[^']+'").findall(html)
for block in blocks:
html = html.replace(block,block.replace(' ','\n'))
print (html)
重新导入
html=“”
'''
#替换
blocks=re.compile(“[^']+”).findall(html)
对于块中的块:
html=html.replace(block,block.replace('\n','
;'))
打印(html)
#恢复
blocks=re.compile(“[^']+”).findall(html)
对于块中的块:
html=html.replace(block,block.replace('
;','\n'))
打印(html)
正如@tdelaney所说,我们可以先替换它,修改它,然后恢复它
import re
html = '''
<z:row MGFF_SCRIPT='
If Variabili("UFFICIOPA") = "" Then
elemento = "0000000"
Else
elemento = Variabili("UFFICIOPA")
End If
'/>
'''
# replace
blocks = re.compile("'[^']+'").findall(html)
for block in blocks:
html = html.replace(block,block.replace('\n',' '))
print (html)
# restore
blocks = re.compile("'[^']+'").findall(html)
for block in blocks:
html = html.replace(block,block.replace(' ','\n'))
print (html)
重新导入
html=“”
'''
#替换
blocks=re.compile(“[^']+”).findall(html)
对于块中的块:
html=html.replace(block,block.replace('\n','
;'))
打印(html)
#恢复
blocks=re.compile(“[^']+”).findall(html)
对于块中的块:
html=html.replace(block,block.replace('
;','\n'))
打印(html)
属性值中的换行符只是要规范化的空白。它们应该在符合DOM的解析器中消失。要通过解析器保存的新行应该使用
代码>实体。我不知道是什么创建了那个XML,但它无法进行实体替换。如果您想在XML文档中保留空格,CDATA节就是为了保留空格。属性值中的换行符只是要规范化的空白。它们应该在符合DOM的解析器中消失。要通过解析器保存的新行应该使用
代码>实体。我不知道是什么创建了那个XML,但它无法进行实体替换。如果您想在XML文档中保留间距,这就是CDATA部分的用途。