2016-08-12 51 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

啊,我明白你在說什麼,仍然不是一個完整的答案,儘管 –