创建XML内联xmlns - python

我正在使用lxml创建XML输出的Python中工作,最终项目将需要将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>

python参考方案

您可以在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 pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python numpy数据指针地址无需更改即可更改 - python

编辑经过一些摆弄之后,到目前为止,我已经隔离了以下状态:一维数组在直接输入变量时提供两个不同的地址,而在使用print()时仅提供一个地址2D数组(或矩阵)在直接输入变量时提供三个不同的地址,在使用print()时提供两个地址3D数组在直接输入变量时提供两个不同的地址,而在使用print()时仅给出一个(显然与一维数组相同)像这样:>>> …

re.findall不返回全场比赛吗? - python

我有一个包含一堆字符串的文件,例如“ size = XXX;”。我第一次尝试使用python的re模块,并且对以下行为感到有些困惑:如果我在正则表达式中使用管道作为“或”,我只会看到返回的匹配项。例如。:>>> myfile = open('testfile.txt','r').read() >…

Spacy如何将标记标签整体化? - python

在包含#标签(例如tweet)的句子中,spacy的令牌生成器将标签分为两个令牌:import spacy nlp = spacy.load('en') doc = nlp(u'This is a #sentence.') [t for t in doc] 输出:[This, is, a, #, sentence, .…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。