【问题标题】:Multiple XML Namespaces in tag with LXML带有 LXML 的标签中的多个 XML 命名空间
【发布时间】:2011-02-20 12:06:45
【问题描述】:

我正在尝试使用 Pythons LXML 库来创建一个 GPX 文件,该文件可由 Garmin 的 Mapsource 产品读取。他们的 GPX 文件的标题是这样的

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" 
     creator="MapSource 6.15.5" version="1.1" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

当我使用以下代码时:

xmlns = "http://www.topografix.com/GPX/1/1"
xsi = "http://www.w3.org/2001/XMLSchema-instance"
schemaLocation = "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
version = "1.1"
ns = "{xsi}"

getXML = etree.Element("{" + xmlns + "}gpx", version=version, attrib={"{xsi}schemaLocation": schemaLocation}, creator='My Product', nsmap={'xsi': xsi, None: xmlns})
print(etree.tostring(getXML, xml_declaration=True, standalone='Yes', encoding="UTF-8", pretty_print=True))

我明白了:

<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\'?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://www.topografix.com/GPX/1/1" xmlns:ns0="xsi"
     ns0:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
     version="1.1" creator="My Product"/>

其中有烦人的ns0 标签。这可能是完全有效的 XML,但 Mapsource 不喜欢它。

知道如何让它没有ns0 标签吗?

【问题讨论】:

    标签: python xml lxml gpx


    【解决方案1】:

    问题在于您的属性名称。

    attrib={"{xsi}schemaLocation" : schemaLocation},
    

    将 schemaLocation 放在 xsi 命名空间中。

    我想你是说

    attrib={"{" + xsi + "}schemaLocation" : schemaLocation}
    

    使用 xsi 的 URL。这与您在元素名称中对命名空间变量的使用相匹配。它将属性放在http://www.w3.org/2001/XMLSchema-instance 命名空间中

    这给出了结果

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xmlns="http://www.topografix.com/GPX/1/1" 
         xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" 
         version="1.1" 
         creator="My Product"/>
    

    【讨论】:

    • 看看这就是为什么我是一个业余爱好者并且不以编码为生!完美的答案。谢谢!
    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多