【问题标题】:Quick way to Upper every value in xml?快速提高xml中每个值的方法?
【发布时间】:2016-08-12 20:28:58
【问题描述】:

我有以下 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>

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

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

【问题讨论】:

    标签: python xml xml-parsing lxml


    【解决方案1】:

    您可以找到所有元素并在每个元素的文本上调用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>
    

    这虽然不包括当你有一个元素的尾部的情况 - 例如。有&lt;Studio&gt;ABC&lt;/Studio&gt;test 而不仅仅是&lt;Studio&gt;ABC&lt;/Studio&gt;。为了支持这一点,请将以下内容也放在 for 循环下:

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

    【讨论】:

    • 谢谢。无论出于何种原因,我都必须添加以下 if 语句,否则我会遇到错误:for elm in root.xpath("//*"): if elm.text: elm.text = elm.text.upper()
    【解决方案2】:

    这是一种提高所有内容的方法,但请注意,这也将包括标签:

    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>
    

    【讨论】:

    • 这就是你提高任何字符串的方式,所以这看起来很明显,我不知道它是否回答了你自己的问题。
    • @cricket_007 对,我基本上只是展示了如何将上弦线拉回节点。
    【解决方案3】:

    假设您可以解析 XML 文件,您可以使用 Python 中内置的用于字符串的 .upper() 函数重写内容。你可以这样称呼它: "mystring".upper()

    【讨论】:

    • 问题只想增加项目,而不是标签。
    • @cricket_007 我确实提到我假设 OP 可以解析 XML 并提取内容。我从来没有说过他/她应该upper()一切
    • 啊,我明白你在说什么,但仍然不是一个完整的答案
    • 我知道,alexce 的回答更好。但我还是想让自己清楚。
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2015-08-03
    • 2012-08-12
    相关资源
    最近更新 更多