gpt4 book ai didi

python - 我怎样才能从 python 中的 xml 中删除 ns?

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:56 45 4
gpt4 key购买 nike

我有这样一个 xml:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:epp xmlns:ns0="urn:ietf:params:xml:ns:epp-1.0"
xmlns:ns1="http://epp.nic.ir/ns/contact-1.0">
<ns0:command>
<ns0:check>
<ns1:check>
<ns1:id>ex61-irnic</ns1:id>
<ns1:id>ex999-irnic</ns1:id>
<ns1:authInfo>
<ns1:pw>1487441516170712</ns1:pw>
</ns1:authInfo>
</ns1:check>
</ns0:check>
<ns0:clTRID>TEST-12345</ns0:clTRID>
</ns0:command>
</ns0:epp>

我想用python 3把它改成这样:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<check>
<id>ex61-irnic</id>
<id>ex999-irnic</id>
<authInfo>
<pw>1487441516170712</pw>
</authInfo>
</check>
</check>
<clTRID>TEST-12345</clTRID>
</command>
</epp>

我试图从 lxml 模块中删除带有 objectify.deannotate 的 ns。但它没有用。你能帮我实现我的目标吗?

最佳答案

考虑 XSLT ,一种专门用于转换 XML 文件(例如删除 namespace )的语言。 Python 的第三方模块lxml 可以运行XSLT 1.0 脚本。因为 XSLT 脚本 XML 文件,所以您可以像解析任何 XML 一样从文件或字符串中解析。无需循环或条件 if 逻辑。此外,您可以在其他语言(PHP、Java、C# 等)中使用此 XSLT 脚本

XSLT (另存为 .xsl 文件以在 Python 中引用)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- IDENTITY TRANSFROM: COPY DOC AS IS -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<!-- REMOVE NAMESPACE PREFIXES, ADD DOC NAMESPACE -->
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="urn:ietf:params:xml:ns:epp-1.0">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>

</xsl:stylesheet>

python

import lxml.etree as et

# LOAD XML AND XSL
doc = et.parse('Input.xml')
xsl = et.parse('XSLT_Script.xsl')

# CONFIGURE AND RUN TRANSFORMER
transform = et.XSLT(xsl)
result = transform(doc)

# OUTPUT RESULT TREE TO FILE
with open('Output.xml', 'wb') as f:
f.write(result)

输出

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<check>
<id>ex61-irnic</id>
<id>ex999-irnic</id>
<authInfo>
<pw>1487441516170712</pw>
</authInfo>
</check>
</check>
<clTRID>TEST-12345</clTRID>
</command>
</epp>

关于python - 我怎样才能从 python 中的 xml 中删除 ns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817239/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com