0
<?xml version="1.0" encoding="UTF-8"?>
<WindowElement xmlns="http://windows.lbl.gov">
    <WindowElementType>System</WindowElementType>
    <Optical>
        <WavelengthData>
            <LayerNumber>System</LayerNumber>
            <Wavelength unit="Integral">Visible</Wavelength>
            <SourceSpectrum>CIE Illuminant D65 1nm.ssp</SourceSpectrum>
            <DetectorSpectrum>ASTM E308 1931 Y.dsp</DetectorSpectrum>
            <WavelengthDataBlock>
                <WavelengthDataDirection>Transmission Front</WavelengthDataDirection>
                <ColumnAngleBasis>LBNL/Klems Full</ColumnAngleBasis>
                <RowAngleBasis>LBNL/Klems Full</RowAngleBasis>
                <ScatteringDataType>BTDF</ScatteringDataType>
                <ScatteringData> 1, 2, 3, 3 
                             </ScatteringData>
            </WavelengthDataBlock>
        </WavelengthData>
    <WavelengthData>
        <LayerNumber>System</LayerNumber>
        <Wavelength unit="Integral">Visible</Wavelength>
        <SourceSpectrum>CIE Illuminant D65 1nm.ssp</SourceSpectrum>
        <DetectorSpectrum>ASTM E308 1931 Y.dsp</DetectorSpectrum>
        <WavelengthDataBlock>
            <WavelengthDataDirection>Transmission Back</WavelengthDataDirection>
            <ColumnAngleBasis>LBNL/Klems Full</ColumnAngleBasis>
            <RowAngleBasis>LBNL/Klems Full</RowAngleBasis>
            <ScatteringDataType>BTDF</ScatteringDataType>
            <ScatteringData> 555, 555
.......

1, 2, 3, 3Python を使用して ScatteringData 要素を読み取り、それを次のように変更するにはどうすればよいですか?5, 8, 8

ScatteringData と呼ばれる 2 つの要素があり、最初の 1 つだけが変更されます。

ありがとうございました!

4

3 に答える 3

2

PythonでXMLを操作するために利用できるライブラリを確認する必要があります。ここから始めることができますhttp://wiki.python.org/moin/PythonXml

于 2012-10-22T21:28:51.117 に答える
2

xml を扱う必要がある場合は、.xml を参照することをお勧めしますlxml

lxml は、Python 言語で XML および HTML を処理するための最も機能豊富で使いやすいライブラリーであると彼らは言います。また、代替手段よりも高速で堅牢です。また、SO で lxml などを検索してください。以前の質問には、どれを使用するかについての提案がたくさんあるためです。

from lxml import etree as ET

In [14]: root = ET.fromstring(datafragment)

In [15]: root.xpath('.//scatteringdata')[0].text='blah'

In [16]: print ET.tostring(root,pretty_print=True)
...
<scatteringdata>blah</scatteringdata>
...

複数の場所を変更する必要がある場合は、ループを使用します。

for i in root.xpath('.//scatteringdata'):
    i.text='smth'
于 2012-10-22T21:59:22.183 に答える
1

これが美しいスープを使った解決策です。基本的に、データにアクセスして、必要に応じて変更することができます。

import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(open("waves.xml"))
soup.scatteringdata.string = "5, 8, 8"
print soup.prettify()

どの出力:

  ...
  <scatteringdatatype>
    BTDF
   </scatteringdatatype>
   <scatteringdata>
    5, 8, 8
   </scatteringdata>
  </wavelengthdatablock>
  ...

最初にデータを確認したい場合は、次を使用できます

originalData = soup.scatteringdata.string 

そして、あなたが望むようにそれを処理します

于 2012-10-22T21:46:40.627 に答える