正如mzjn所提示的,我正在改變整個問題並試圖簡化它。Python lxml庫中沒有空標記
我有這樣的XML:
<Content Version="1.0" Name="Cont">
<Element Ref="Text_4158" ElementType="ItISSomething" GroupName="Some_Content">
<body>
<p>Some content is here.</p>
</body>
</Element>
<Element Ref="List_585" ElementType="ListElements" GroupName="Lists">
<body>
<p><span class="bold">A list of things</span>: Element1, element2, element3, element4 element5.</p>
</body>
</Element>
</Content>
我要修改的列表的內容和替換 「」 爲 「<,>」。我有這樣的代碼:
from lxml import etree as et
def replace_commas(file):
parser = et.parse(str(file))
root = parser.getroot()
xpath_expr = "//Element[starts-with(@Ref,'List_') \
or @GroupName='Lists']/descendant::*"
elements = root.xpath(xpath_expr)
for element in elements:
if element.text is not None or element.tail is not None:
text = str(element.text)
text = text.replace(',', '<,>')
tail = str(element.tail)
tail = tail.replace(',','<,>')
element.text = text
element.tail = tail
tree = et.ElementTree(root)
tree.write(file, pretty_print=True)
預期輸出應該是:
<Content Version="1.0" Name="Cont">
<Element Ref="Text_4158" ElementType="ItISSomething" GroupName="Some_Content">
<body>
<p>Some content is here.</p>
</body>
</Element>
<Element Ref="List_585" ElementType="ListElements" GroupName="Lists">
<body>
<p><span class="bold">A list of things</span>: Element1<,> element2<,> element3<,> element4 element5.</p>
</body>
</Element>
</Content>
但是我的結果是:
<Content Version="1.0" Name="Cont">
<Element Ref="Text_4158" ElementType="ItISSomething" GroupName="Some_Content">
<body>
<p>Some content is here.</p>
</body>
</Element>
<Element Ref="List_585" ElementType="ListElements" GroupName="Lists">
<body>
<p>None<span class="bold">A list of things</span>: Element1<,> element2<,> element3<,> element4 element5.</p>
</body>
</Element>
</Content>
獲取標籤 「p」 和「跨度之間的無「而且什麼都不應該。哪裏不對?
我希望此問題的更新有助於瞭解查詢並找到解決方案。
更新:更正了def replace_commas(file)中的冒號:和et.ElementTree(root)的縮進。
另外,我發現mzjn提供的解決方案在哪裏給出錯誤。我在我的xml這個元素:
<Element Ref="List_222"ElementType="ListElements" GroupName="Lists">
<body>
<p><span class="bold">List: <span class="italic">Important elements</span></span>: El1 (prop1), el2 (prop2), el3 (prop3); with a special property.</p>
</body>
</Element>
在此元素我得到了重要元素的尾部NoneType,因爲它得到值無。
我看不到如何解決它。
你可以添加理想的情況嗎? – Jonathan
我已經添加了理想的情況下,這將與沒有None值的空元素,我已經添加了一些關於我的小原因研究的信息。但是我還沒有找到任何。 – TMikonos
請簡化問題並創建[mcve]。 – mzjn