【发布时间】:2017-05-09 16:29:09
【问题描述】:
我有一个 XML 文件(下面的示例) - 我使用的是 Python 2.7
我想将所有出现的 stag 改为读取 prod。 “stag”一词位于 URL 中。我不想改变整个 url 只是单词 stag 的出现 - 请参阅示例:
url=http://stag/comp/rest/services/editor/hyd/MapServer
想改成:
url=http://prod/comp/rest/services/editor/hyd/MapServer
<Map FullExtent="-136163.9492,444360.64787994,-525467.175315,43020.05517682" InitialExtent="-32989.136772,6307.55418809,-4753.07696,5137.2783653">
<LayerList>
<Items>
<Item ID="17" />
<Item ID="20" IsExpanded="true" Name="Reference Data" Visible="true">
<Items>
<Item ID="30" />
<Item ID="34" VisibleInLayerList="false" />
<Item ID="22" VisibleInLayerList="false" />
<Item ID="41" VisibleInLayerList="false" />
<Item ID="16" />
<Item ID="37" />
<Item ID="24" />
<Item ID="39" />
<Item ID="32" />
<Item ID="28" />
<Item ID="26" />
</Items>
</Item>
<Item ID="19" IsExpanded="true" Name="Basemaps" Visible="true">
<Items>
<Item ID="12" />
<Item ID="11" />
</Items>
</Item>
</Items>
</LayerList>
<MapServices>
<MapService ConnectionString="url=http://stag/comp/rest/services/editor/hyd/MapServer" DefaultAllowSymbolization="true" DisplayName="hydrants" Function="Operational" ID="17" ImageFormat="Png32" ImpersonateWithActor="false" IncludeCopyright="false" IncludeInLayerList="true" InstantSearch="false" InstantSearchAttachments="false" IsExpanded="true" MaximumScale="500" MinimumScale="7500" Opacity="1" OverrideTemporalSettings="false" PasswordEncrypted="false" ProviderInvariantName="Geocortex.Gis.Services.ArcGisServer.Rest" SearchNonTextFields="true" SupportedImageHeight="0" SupportedImageWidth="0" UseHttpAuthentication="false" Visible="true">
<CachedServiceData />
<Layers>
<Layer AllowSymbolization="true" CanCopyFeature="true" DisplayName="Hydrants" FeatureDescription="<div><span style="font-family: Arial, Verdana; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><span style="font-weight: bold;">Hydrant ID: </span></span><font face="Arial, Verdana"><span style="font-size: 13.3333px;">{FIRE_HYDRANT_ID}</span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><span style="font-size: 13.3333px; font-family: Arial, Verdana;"><span style="font-weight: bold;"><br/></span></span></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><span style="font-size: 13.3333px; font-family: Arial, Verdana;"><span style="font-weight: bold;">Work Order Number</span>: {WORK_ORDER_NUM}</span></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><span style="font-size: 13.3333px; font-family: Arial, Verdana;"><br/></span></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><span style="font-weight: bold;">Make</span>: {MAKE}</span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><br/></span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><span style="font-weight: bold;">Elevation</span>: {ELEVATION}</span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><br/></span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><span style="font-weight: bold;">Hydrant Number</span>: {HYDRANT_NUM}</span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><br/></span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><span style="font-weight: bold;">Hydrant Size</span>: {HYDRANT_SIZE}</span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><br/></span></font></div><div style="font-family: Arial, Verdana; font-size: 10pt; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; line-height: normal;"><font face="Arial, Verdana"><span style="font-size: 13.3333px;"><span style="font-weight: bold;">Install Year</span>: {INSTALL_YEAR}</span></font></div>" FeatureLabel="<b>Fire Hydrant</b>" Identifiable="true" IncludeInLayerList="true" IncludeInLegend="true" IsCatalogLayer="false" IsExpanded="true" LayerListID="30" Name="SJPWPUB.FIRE_HYDRANT" NativeID="0" Queryable="true" Searchable="true" ShowFeatureHyperlinks="ShowAll" ShowLabels="true" ShowMapTips="true" Snappable="true" SnappingEnabled="false" UnconfiguredFieldsCanSymbolizeClassBreaks="false" UnconfiguredFieldsCanSymbolizeUniqueValue="false" UnconfiguredFieldsSearchable="false" UnconfiguredFieldsVisible="false" UnconfiguredRelationshipsVisible="true" Visible="true">
<Fields>
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="5" DisplayName="Hydrant Number" FocusField="false" Name="HYDRANT_NUM" Searchable="true" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="2" DisplayName="Work Order Number" FocusField="false" Name="WORK_ORDER_NUM" Searchable="false" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="3" DisplayName="Make" FocusField="false" Name="MAKE" Searchable="false" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="6" DisplayName="Hydrant Size" FocusField="false" Name="HYDRANT_SIZE" Searchable="false" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="7" DisplayName="Install Year" FocusField="false" Name="INSTALL_YEAR" Searchable="false" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="4" DisplayName="Elevation" FocusField="false" Name="ELEVATION" Searchable="false" Visible="true" />
<Field CanSymbolizeClassBreaks="false" CanSymbolizeUniqueValue="false" DisplayIndex="1" DisplayName="Fire Hydrant ID" FocusField="false" Name="OBJECTID" Searchable="false" Visible="true" />
</Fields>
</Layer>
</Layers>
</MapService>
</Map>
我尝试了几种不同的方法,但似乎都不起作用。这是我最近的尝试:
Prod_xml = r"C:/Users/ba/Documents/temp/Prod/Projects/Site.xml"
import lxml.etree as ET
with open(Prod_xml, 'rb+') as f:
tree = ET.parse(f)
root = tree.getroot()
for elem in root.getiterator():
if elem.text:
elem.text.replace('stag', 'prod')
if elem.tail:
elem.tail.replace('stag', 'prod')
f.seek(0)
f.write(ET.tostring(tree, encoding='UTF-8', xml_declaration=True))
f.truncate()
这不起作用。我没有收到任何错误,但 xml 文件没有改变。
关于如何做到这一点的任何想法?
更新
我想使用 ElementTree 选项,但是当我使用 xml.etree.ElementTree 脚本时出现以下错误(它还会完全删除我的 xml 文件中的数据):
Traceback (most recent call last):
File "F:/Applications/Geocortex/MovingGeocortexFiles.py", line 56, in <module>
ET.dump(f)
File "C:\Python27\ArcGIS10.3\lib\xml\etree\ElementTree.py", line 1164, in dump
elem.write(sys.stdout)
File "C:\Python27\ArcGIS10.3\lib\xml\etree\ElementTree.py", line 817, in write
self._root, encoding, default_namespace
File "C:\Python27\ArcGIS10.3\lib\xml\etree\ElementTree.py", line 876, in _namespaces
iterate = elem.getiterator # cET compatibility
AttributeError: 'file' object has no attribute 'getiterator'
【问题讨论】: