2016-08-12 30 views
0

我有以下XML:快速的方法来上传每个值在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> 

回答

4

你可以找到所有元素和每个元素的文本拨打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 
+0

谢谢。不管出于什么原因,我不得不添加下面的if语句,否则我会碰到一个错误:'rootmpath(“// *”)中的elm: if elm.text: elm.text = elm .text.upper()' – David542

-1

这里是一个办法上的一切,但请注意,这将包括标签,以及:

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> 
+2

这就是你如何在任何字符串上面,这样看起来很明显,我不知道它是否回答你自己的问题。 –

+0

@ cricket_007对,我只是基本上展示了如何让上层的回到节点。 – David542

-1

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

+2

问题只是想把项目放在上面,而不是标签。 –

+0

@ cricket_007我的确提到过,我认为OP可以解析XML并提取内容。我从来没有说过他/她应该'上()'一切 – meetaig

+0

啊,我明白你在说什么,仍然不是一个完整的答案,尽管 –