<?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
.......
如何使用Python在ScatteringData元素中读取1, 2, 3, 3
并将其更改为5, 8, 8
有两个名为ScatteringData的元素,只有第一个元素被更改。
谢谢!
答案 0 :(得分:2)
您应该查看可在python中使用XML的库。你可以从这里开始http://wiki.python.org/moin/PythonXml
答案 1 :(得分:2)
如果您必须处理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'
答案 2 :(得分:1)
以下是使用beautiful soup的解决方案。基本上它允许您只需向下走到数据并根据需要进行修改。
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
然后处理