python中使用lxml过滤xml:XSLT
尝试使用XSLT过滤xml输入时,我在运行以下代码时遇到问题。我认为定义的XSLT有问题。我想在XSLT中定义一个规则,以丢弃输入xml中的“Foo”元素。我的代码是这样的:python中使用lxml过滤xml:XSLT,python,xml,xslt,lxml,Python,Xml,Xslt,Lxml,尝试使用XSLT过滤xml输入时,我在运行以下代码时遇到问题。我认为定义的XSLT有问题。我想在XSLT中定义一个规则,以丢弃输入xml中的“Foo”元素。我的代码是这样的: from lxml import etree from io import StringIO def testFilter(): xslt_root = etree.XML('''\ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/
from lxml import etree
from io import StringIO
def testFilter():
xslt_root = etree.XML('''\
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Foo"/>
</xsl:stylesheet>
''')
transform = etree.XSLT(xslt_root)
f = StringIO(unicode('<?xml version="1.0"?><ComponentData><DataSet name="one"> <Foo fooValue="2014"/></DataSet><DataSet name="two"><Foo fooValue="2015"/></DataSet></ComponentData>
'))
doc = etree.parse(f)
result_tree = transform(doc)
print(str(result_tree))
if __name__=='__main__':
testFilter()
从lxml导入etree
从io导入StringIO
def testFilter():
xslt_root=etree.XML(“”)\
''')
transform=etree.XSLT(XSLT\u根)
f=StringIO(unicode('
'))
doc=etree.parse(f)
结果树=转换(文档)
打印(str(结果树))
如果“名称”=“\uuuuuuuu主要”:
testFilter()
您缺少的是正确的模板匹配
修改代码:
from lxml import etree
from io import StringIO
def testFilter():
xslt_root = etree.XML('''\
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="TimeStamp"/>
</xsl:stylesheet>
''')
transform = etree.XSLT(xslt_root)
f = StringIO(unicode('<?xml version="1.0"?><ComponentData><DataSet name="one"> <TimeStamp timeStampValue="2014"/></DataSet><DataSet name="two"><TimeStamp timeStampValue="2015"/></DataSet></ComponentData>'))
doc = etree.parse(f)
result_tree = transform(doc)
print(str(result_tree))
if __name__=='__main__':
testFilter()
从lxml导入etree
从io导入StringIO
def testFilter():
xslt_root=etree.XML(“”)\
''')
transform=etree.XSLT(XSLT\u根)
f=StringIO(unicode(“”))
doc=etree.parse(f)
结果树=转换(文档)
打印(str(结果树))
如果“名称”=“\uuuuuuuu主要”:
testFilter()
此输出:
<?xml version="1.0"?>
<ComponentData><DataSet name="one"> </DataSet><DataSet name="two"/></ComponentData>
为什么您将时间戳从更改为Foo
?不管怎样,这个想法还是一样的,检查我下面的答案。它只是一个名字,可以是任何东西,这并不重要。谢谢,如果你能解释一下你是如何定义规则的,那就太好了,实际上我需要对我的xml文件做更多的修改,比如只删除元素标记中的一个属性或者删除一块标记。检查一下,它包含了很多关于使用xslt的有用信息。