【发布时间】:2018-10-13 23:40:07
【问题描述】:
我有一个这样的 XML sn-p:
<parent id="1">
<child1>
<child2>[content]I need to get[/content]Other text</child2>
</child1>
</parent>
我想将“child1”的[内容]作为属性添加到父元素中。
得到这样的东西:
<parent id="1" value = "I need to get">
<child1>
<child2>Other text</child2>
</child1>
</parent>
我有这段代码,但它不起作用,因为它看起来只在第一个孩子中迭代,不会转到下一个。
pattern = re.compile('[content](.*?)[/content]')
xml_parser = et.parse(str(xml_file))
root_xml = xml_parser.getroot()
translatable_elements = root_xml.xpath('//parent')
for element in translatable_elements:
for child_element in element.iterchildren():
if child_element.tag == 'child1':
source_content = child_element.text
value_str = pattern.match(source_content).group(1)
element.attrib['value'] = value_str
source_content = pattern.sub(source_content,'')
tree = et.ElementTree(root_xml)
tree.write(str(xml_file), encoding='utf-8', pretty_print=True)
【问题讨论】:
-
element.attrib['satt_note'] = notes_str应该在内部循环中 -
当多个孩子的内容冲突时会发生什么?
-
你能展示你的代码实际上做了什么让你对它的行为不满意吗?
-
它只得到
但是代码无法访问 -
正则表达式真的是匹配
[content] ... [/content]的正确工具吗?这真的是一个文本字符串吗?还是实际上是一些嵌套的 XML、HTML 或其他可以正确解析的东西(即不使用正则表达式)?
标签: python regex xml python-3.x lxml