如何快速提高XML中每个值的值?

2024-06-07 22:12:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下xml:

<Item>
  <Platform>itunes</Platform>
  <PlatformID>102224185</PlatformID>
  <Info>
    <LanguageOfMetadata>EN</LanguageOfMetadata>
    <Name>Commander In Chief</Name>
    <Studio>abc</Studio>
  </Info>
  <Type>TVSeries</Type>
</Item>

获取所有值的最快方法是什么?例如:

<Item>
  <Platform>ITUNES</Platform>
  <PlatformID>102224185</PlatformID>
  <Info>
    <LanguageOfMetadata>EN</LanguageOfMetadata>
    <Name>COMMANDER IN CHIEF</Name>
    <Studio>ABC</Studio>
  </Info>
  <Type>TVSERIES</Type>
</Item>

Tags: nameininfotypexmlitemitunescommander
3条回答

假设您可以解析XML文件,那么只需使用python中内置的.upper()函数重写内容即可。你可以这样称呼它: "mystring".upper()。你知道吗

下面是一种将所有内容上移的方法,不过请注意,这也将包括标记:

node = etree.fromstring(etree.tostring(item).upper())
print etree.tostring(node, pretty_print=True)

<ITEM>
  <PLATFORM>ITUNES</PLATFORM>
  <PLATFORMID>102224185</PLATFORMID>
  <INFO>
    <LANGUAGEOFMETADATA>EN</LANGUAGEOFMETADATA>
    <NAME>COMMANDER IN CHIEF</NAME>
    <STUDIO>ABC</STUDIO>
  </INFO>
  <TYPE>TVSERIES</TYPE>
</ITEM>

您可以找到所有元素并对每个元素的文本调用upper()

import lxml.etree as ET

data = """<Item>
  <Platform>itunes</Platform>
  <PlatformID>102224185</PlatformID>
  <Info>
    <LanguageOfMetadata>EN</LanguageOfMetadata>
    <Name>Commander In Chief</Name>
    <Studio>abc</Studio>
  </Info>
  <Type>TVSeries</Type>
</Item>
"""

root = ET.fromstring(data)
for elm in root.xpath("//*"):  # //* would find all elements recursively
    elm.text = elm.text.upper()

print(ET.tostring(root))

印刷品:

<Item>
  <Platform>ITUNES</Platform>
  <PlatformID>102224185</PlatformID>
  <Info>
    <LanguageOfMetadata>EN</LanguageOfMetadata>
    <Name>COMMANDER IN CHIEF</Name>
    <Studio>ABC</Studio>
  </Info>
  <Type>TVSERIES</Type>
</Item>

不过,这并不包括这样的情况:例如,您有一个元素的尾部,例如,有<Studio>ABC</Studio>test,而不是只有<Studio>ABC</Studio>。为了支持这一点,还可以在for循环下添加以下内容:

elm.tail = elm.tail.upper() if elm.tail else None

相关问题 更多 >

    热门问题