python - 创建 XML 内联 xmlns

标签 python xml lxml

我正在 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/

相关文章:

python - 当给定 IP 和子网掩码时确定网络 IP

python - tensorflow 2.0 : tf. GradientTape().gradient() 返回无

java - 如何使用 xsd :sequence? 允许元素按任意顺序排列

python - lxml 中子元素文本值的 XPath

python - lxml:获取具有特定子元素的元素?

python - 在 python pandas 中减去两个非数字数据帧

python - 如何停止计时器滴答声

javascript - 如何使用 JavaScript 解析附加的 XML 代码?

c# - Visual Studio 2010 是否有使用 LINQ/XPATH 查询 XML 文件的插件?

python - 如何在lxml中表达 `there is a child node in current node`