如果找到某個文本,我需要從 xml 檔案中洗掉所有標簽。
例子:
<root-element>
<tag-name first:line="some-value">bla-bla</tag-name>
<tag-name second:line="some-value">bla-bla</tag-name>
<tag-name third:line="some-value">bla-bla</tag-name>
<tag-name first:line="some-value">bla-bla</tag-name>
<tag-name second:line="some-value">bla-bla</tag-name>
</root-element>
所以對于每一個first:line放入 XML 檔案,我想洗掉整個標簽。
uj5u.com熱心網友回復:
您將需要使用 xml 決議庫。
我推薦lxml。
然后使用 text() 屬性上的函式 string-length() 構建 xpath 選擇器。這樣它將選擇任何帶有文本的元素。
import lxml.etree as et
tree=et.fromstring(xml)
for bad in tree.xpath("//*[string-length(text()) > 0]"):
bad.getparent().remove(bad)
print(et.tostring(tree, pretty_print=True, xml_declaration=True))
uj5u.com熱心網友回復:
下面是如何通過 XSLT 做到這一點。
XSLT 使用所謂的身份轉換模式。
我修改了 XML 并洗掉了虛假的命名空間。
輸入 XML
<?xml version="1.0"?>
<root-element>
<tag-name firstline="some-value">bla-bla</tag-name>
<tag-name secondline="some-value">bla-bla</tag-name>
<tag-name thirdline="some-value">bla-bla</tag-name>
<tag-name firstline="some-value">bla-bla</tag-name>
<tag-name secondline="some-value">bla-bla</tag-name>
</root-element>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@firstline]"/>
</xsl:stylesheet>
輸出 XML
<root-element>
<tag-name secondline="some-value">bla-bla</tag-name>
<tag-name thirdline="some-value">bla-bla</tag-name>
<tag-name secondline="some-value">bla-bla</tag-name>
</root-element>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383948.html
