2011-11-04 4 views
0

의 텍스트를 의 텍스트로 바꾸고 싶습니다. 사전에 해당 키가없는 경우.여러 텍스트를 파이썬을 사용하여 XML로 해당 텍스트로 바꾸기 - 파트 2 -

여기 제가 지금 작업하고있는 xml입니다.

- <esri:Workspace xmlns:esri="http://www.esri.com/schemas/ArcGIS/10.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    - <WorkspaceDefinition xsi:type="esri:WorkspaceDefinition"> 
     <WorkspaceType>esriLocalDatabaseWorkspace</WorkspaceType>  
     <Domains xsi:type="esri:ArrayOfDomain" /> 
    - <DatasetDefinitions xsi:type="esri:ArrayOfDataElement"> 
      - <DataElement xsi:type="esri:DEFeatureClass"> 
      <CatalogPath>/FC=CHO_H12</CatalogPath>  
      <Name>CHO_H12</Name>  
      <DatasetType>esriDTFeatureClass</DatasetType> 
      <DSID>8</DSID>  
      <Versioned>false</Versioned> 
      <CanVersion>false</CanVersion> 
      <ConfigurationKeyword /> 
      <HasOID>true</HasOID> 
      <OIDFieldName>OBJECTID</OIDFieldName> 
      - <Fields xsi:type="esri:Fields"> 
       - <FieldArray xsi:type="esri:ArrayOfField">  
        - <Field xsi:type="esri:Field"> 
         <Name>KEY_CODE</Name> 
         <Type>esriFieldTypeString</Type> 
         <IsNullable>true</IsNullable> 
         <Length>255</Length> 
         <Precision>0</Precision> 
         <Scale>0</Scale> 
         <AliasName>リンクコード</AliasName> # to "KEY_CODE" 
         <ModelName>KEY_CODE</ModelName>   
        </Field> 
        - <Field xsi:type="esri:Field"> 
          <Name>KEN</Name> 
          <Type>esriFieldTypeString</Type> 
          <IsNullable>true</IsNullable> 
          <Length>255</Length> 
          <Precision>0</Precision> 
          <Scale>0</Scale> 
          <AliasName>都道府県番号</AliasName> # to "Prefecture_Code" 
          <ModelName>KEN</ModelName>   
        </Field> 
        - <Field xsi:type="esri:Field"> 
          <Name>CITY</Name>   
          <Type>esriFieldTypeString</Type>   
          <IsNullable>true</IsNullable>   
          <Length>255</Length>   
          <Precision>0</Precision>   
          <Scale>0</Scale>   
          <AliasName>市区町村番号</AliasName> # to "City_code"  
          <ModelName>CITY</ModelName>   
          </Field> 

나는 썼다; 이렇게 jp2en 사전에 해당하는 키가 존재하더라도

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import xml.etree.cElementTree as etree 

jp2en = {'リンクコード': 'KEY_CODE', '都道府県番号': 'Prefecture_Code', 
'市区町村番号': 'City_Code'} 

    tree = etree.parse('input.xml') 
    for field in tree.iterfind('.//Fields/FieldArray/Field'): 
     name, alias = [field.find(tag) for tag in ['Name', 'AliasName']] 
     if name is None or alias is None: continue 
     alias.text = jp2en.get(name.text.strip(), name.text) 
    tree.write('output.xml', encoding='utf-8') 

그러나, 출력, 소자의 텍스트 에서 텍스트로 대체되고;

<AliasName>リンクコード</AliasName> Returns a text "KEY_CODE" # the text is the same for Name and a key. 
<AliasName>都道府県番号</AliasName> Returns a text "KEN" from Name instead of a key "Prefecture_Code" 
<AliasName>市区町村番号</AliasName> Returns a text "CITY" from Name instead of a key "City_code" 

저는 파이썬 3.2.2를 사용합니다.

+0

코드를 실행하면 어떻게 될까요? 무슨 일이 일어날 것으로 예상됩니까? – jfs

+0

파이썬 3에서는'coding : utf-8'을 지정할 필요가 없습니다. 기본값입니다. – jfs

+0

은'[tag : xmltag]'대신''을 사용합니다. 후자는 StackOverflow 태그가 아니라 XML 태그입니다. – jfs

답변

1

<AliasName> 요소의 텍스트를 <Name>의 텍스트로 바꾸고 싶다면 사전에 해당 키가 없다고 생각하면됩니다 (현재 동작이 원하는 것을 볼 수 있습니다). (더 키가없는 경우 <AliasName>을 변경하지 않는)이 줄을 변경 :

alias.text = jp2en.get(name.text.strip(), alias.text) 

사람 :

alias.text = jp2en.get(name.text.strip(), name.text) 

키 값이 다음 위의 라인으로 대체하는 대신 <Name><AliasName>에서 제공해야하는 경우 :

if alias.text is not None: 
    alias.text = jp2en.get(alias.text.strip(), name.text) 
else: 
    alias.text = name.text 
+0

@ 세바스챤 : 나는 거의 다 왔어. dic ..에 해당 키가있을 때에도 별칭 텍스트가 항상 이름 텍스트로 대체된다는 것입니다. 위 사용 및 출력 한 코드를 업데이트했습니다. – fairyberry

+0

@ 세바스찬 : 그것은 트릭을 했어 !! 당신은 생명의 은인입니다! 내 일을 훨씬 쉽게 해줬습니다. 충분히 감사 할 수 없습니다. 고맙습니다!! – fairyberry

관련 문제