我正在 Python 中使用 lxml 创建 XML 输出,最终项目需要将 xml 导入 Strava,因此在导入之前我需要正确的架构。下面是我创建的架构,我的问题是,如果我包含如下所示的 XMLNS 文本,我似乎无法获得正确的格式。
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>0.0</Speed>
</TPX>
</Extensions>
到目前为止我的代码是:
def Trackpoint():
E = lxml.builder.ElementMaker()
Trackpoint = E.Trackpoint
Time = E.Time
Postion = E.Postion
LatitudeDegrees = E.LatitudeDegrees
LongitudeDegrees = E.LongitudeDegrees
AltitudeMeters = E.AltitudeMeters
DistanceMeters = E.DistanceMeters
Cadence = E.Cadence
Extensions = E.Extensions
TPX = E.TPX
Speed = E.Speed
the_doc = Trackpoint(
Time('2017-11-23T20:44:33Z'),
Postion(
LatitudeDegrees('32.2996560'),
LongitudeDegrees('-64.7868500'),
),
AltitudeMeters('16.4'),
DistanceMeters('0.0'),
Cadence('0'),
Extensions(
TPX(
Speed('0.0'),
)
)
)
print lxml.etree.tostring(the_doc, pretty_print=True)
这是当前的输出:
<Trackpoint>
<Time>2017-11-23T20:44:33Z</Time>
<Postion>
<LatitudeDegrees>32.2996560</LatitudeDegrees>
<LongitudeDegrees>-64.7868500</LongitudeDegrees>
</Postion>
<AltitudeMeters>16.4</AltitudeMeters>
<DistanceMeters>0.0</DistanceMeters>
<Cadence>0</Cadence>
<Extensions>
<TPX>
<Speed>0.0</Speed>
</TPX>
</Extensions>
</Trackpoint>
最佳答案
您可以在 ElementMaker 中指定命名空间。您还可以在 nsmap(命名空间映射)中使用 None
使其不带前缀。
示例...
from lxml import etree, builder
def Trackpoint():
E = builder.ElementMaker()
AE_E = builder.ElementMaker(namespace="http://www.garmin.com/xmlschemas/ActivityExtension/v2",
nsmap={None: "http://www.garmin.com/xmlschemas/ActivityExtension/v2"})
Trackpoint = E.Trackpoint
Time = E.Time
Postion = E.Postion
LatitudeDegrees = E.LatitudeDegrees
LongitudeDegrees = E.LongitudeDegrees
AltitudeMeters = E.AltitudeMeters
DistanceMeters = E.DistanceMeters
Cadence = E.Cadence
Extensions = E.Extensions
TPX = AE_E.TPX
Speed = AE_E.Speed
the_doc = Trackpoint(
Time('2017-11-23T20:44:33Z'),
Postion(
LatitudeDegrees('32.2996560'),
LongitudeDegrees('-64.7868500'),
),
AltitudeMeters('16.4'),
DistanceMeters('0.0'),
Cadence('0'),
Extensions(
TPX(
Speed('0.0'),
)
)
)
print etree.tostring(the_doc, pretty_print=True)
Trackpoint()
输出...
<Trackpoint>
<Time>2017-11-23T20:44:33Z</Time>
<Postion>
<LatitudeDegrees>32.2996560</LatitudeDegrees>
<LongitudeDegrees>-64.7868500</LongitudeDegrees>
</Postion>
<AltitudeMeters>16.4</AltitudeMeters>
<DistanceMeters>0.0</DistanceMeters>
<Cadence>0</Cadence>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>0.0</Speed>
</TPX>
<Speed>test</Speed>
</Extensions>
</Trackpoint>
关于python - 创建 XML 内联 xmlns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823427/