2017-01-31 15 views
-1

私はこのXMLをPythonでxml.dom.minidomを使って編集しようとしていますが、変更する必要のある値に到達する方法がわかりません。私は "customGetCapabilities" の値を "true" に変更し、 "pathToCustomGetCapabilitiesFiles" でURLを指定したいと思い、ここ以内PythonでXMLを編集する

私は、

  <SVCExtension xsi:type="typens:SVCExtension"> 
       <Enabled>true</Enabled> 
       <Info xsi:type="typens:PropertySet"> 
       <PropertyArray xsi:type="typens:ArrayOfPropertySetProperty"> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>WebEnabled</Key> 
         <Value xsi:type="xs:string">true</Value> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>WebCapabilities</Key> 
         <Value xsi:type="xs:string">GetCapabilities,GetMap,GetFeatureInfo,GetStyles,GetLegendGraphic,GetSchemaExtension</Value> 
        </PropertySetProperty> 
       </PropertyArray> 
       </Info> 
       <Props xsi:type="typens:PropertySet"> 
       <PropertyArray xsi:type="typens:ArrayOfPropertySetProperty"> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>onlineResource</Key> 
         <Value xsi:type="xs:string">*censored url*</Value> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>customGetCapabilities</Key> 
         <Value xsi:type="xs:string">false</Value> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>pathToCustomGetCapabilitiesFiles</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>pathToCustomSLDFile</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>inheritLayerNames</Key> 
         <Value xsi:type="xs:string">false</Value> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>name</Key> 
         <Value xsi:type="xs:string">WMS</Value> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>title</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>abstract</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>keyword</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactPerson</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactPosition</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactOrganization</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>address</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>addressType</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>city</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>stateOrProvince</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>postCode</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>country</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactVoiceTelephone</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactFacsimileTelephone</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>contactElectronicMailAddress</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>fees</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
        <PropertySetProperty xsi:type="typens:PropertySetProperty"> 
         <Key>accessConstraints</Key> 
         <Value xsi:type="xs:string" /> 
        </PropertySetProperty> 
       </PropertyArray> 
       </Props> 
       <TypeName>WMSServer</TypeName> 
      </SVCExtension> 

今()doc.getElementsByTagNameすることによって、このチャンクにアクセスします。

誰かが私にこれらの値を解析する方法を教えてもらえますか?ありがとうございます

+2

特定の質問をする必要があります。 ElementTreeでXMLを解析してみてください。これは使いやすく、よく文書化されており、豊富な機能を持っています –

+0

ElementTreeを使って調べました。しかし、それはXMLを書き直す際に多くの問題を追加します。それはxmlを書き戻す前に名前空間を取り除いているようですが、これはやりたくありません。 – calk93

+0

ElementTree(または特にlxml.etree)が不正確に往復する場合、それは驚くべきことです(後者の場合は非常に驚異的です)。そして別の質問の根拠です。 –

答えて

0

以下は、minidomでこれを行う方法の1つです。

props = doc.getElementsByTagName('PropertySetProperty') 
for prop in props: 
    if prop.hasChildNodes(): 
     key = prop.getElementsByTagName('Key')[0] 
     if key.firstChild.nodeValue == 'customGetCapabilities': 
      value = key.parentNode.getElementsByTagName("Value")[0] 
      value.firstChild.nodeValue = 'true' 

     if key.firstChild.nodeValue == 'pathToCustomGetCapabilitiesFiles': 
      path_url = key.parentNode.getElementsByTagName('Value')[0] 
      path_url.appendChild(doc.createTextNode('http://someurl/')) 
      break 
関連する問題