現在、私はPythonスクリプトを書くことで、あるタイプのXMLからあるタイプのSLDを変換しようとしています。私は2週間近く頭を強くしていて、ほとんど進展していない。 私はPythonには本当に新しいですし、任意の提案を感謝します!
基本的に、私はこれを回す必要があります...。このPythonを使ってSLDを1.1から1.0に変換する
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>Custom_Landuse</Name>
<UserStyle>
<Name>Land Use</Name>
<FeatureTypeStyle>
<Rule>
<Name>Woods</Name>
<Title>Woods - 1:65,000 to 1:150,000</Title>
<Abstract>A Land Use style</Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>AREA_CODE</ogc:PropertyName>
<ogc:Literal>CED</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<MinScaleDenominator>65000</MinScaleDenominator>
<MaxScaleDenominator>150000</MaxScaleDenominator>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#228B22</CssParameter>
<CssParameter name="fill-opacity">1</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#ADFF2F</CssParameter>
<CssParameter name="stroke-opacity"></CssParameter>
<CssParameter name="stroke-width">1.4</CssParameter>
<CssParameter name="stroke-linejoin">round</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>NAME</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Sans-Serif</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
<CssParameter name="font-size">20</CssParameter>
<CssParameter name="font-weight">bold</CssParameter>
</Font>
<Fill>
<CssParameter name="fill">#ADFF2F</CssParameter>
</Fill>
</TextSymbolizer>
</Rule>
<Rule>
<Name>Grass</Name>
<Title>Grass - 1:65,000 to 1:150,000</Title>
<Abstract>A Land Use style</Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>AREA_CODE</ogc:PropertyName>
<ogc:Literal>CED</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<MinScaleDenominator>65000</MinScaleDenominator>
<MaxScaleDenominator>150000</MaxScaleDenominator>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#90EE90</CssParameter>
<CssParameter name="fill-opacity">1</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#6B8E23</CssParameter>
<CssParameter name="stroke-opacity"></CssParameter>
<CssParameter name="stroke-width">1.4</CssParameter>
<CssParameter name="stroke-linejoin">round</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>NAME</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Sans-Serif</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
<CssParameter name="font-size">20</CssParameter>
<CssParameter name="font-weight">bold</CssParameter>
</Font>
<Fill>
<CssParameter name="fill">#6B8E23</CssParameter>
</Fill>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
に
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.1.0" xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"
xmlns:se="http://www.opengis.net/se">
<NamedLayer>
<se:Name>Custom_Landuse</se:Name>
<se:Description>
<se:Title>Custom_Landuse</se:Title>
<se:Abstract>A Land Use style</se:Abstract>
</se:Description>
<UserStyle>
<se:Name>County Electoral Division</se:Name>
<se:FeatureTypeStyle>
<se:Rule>
<se:Name>Woods</se:Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>AREA_CODE</ogc:PropertyName>
<ogc:Literal>CED</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<se:MinScaleDenominator>65000</se:MinScaleDenominator>
<se:MaxScaleDenominator>150000</se:MaxScaleDenominator>
<se:PolygonSymbolizer>
<se:Name>Woods</se:Name>
<se:Fill>
<se:SvgParameter name="fill">#228B22</se:SvgParameter>
<se:SvgParameter name="fill-opacity">0</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#ADFF2F</se:SvgParameter>
<se:SvgParameter name="stroke-opacity"></se:SvgParameter>
<se:SvgParameter name="stroke-width">1.4</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">round</se:SvgParameter>
<se:SvgParameter name="stroke-linecap">round</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
<se:TextSymbolizer>
<se:Name>Woods</se:Name>
<se:Label>
<ogc:PropertyName>NAME</ogc:PropertyName>
</se:Label>
<se:Font>
<se:SvgParameter name="font-family">Sans-Serif</se:SvgParameter>
<se:SvgParameter name="font-style">normal</se:SvgParameter>
<se:SvgParameter name="font-size">20</se:SvgParameter>
<se:SvgParameter name="font-weight">bold</se:SvgParameter>
</se:Font>
<se:Fill>
<se:SvgParameter name="fill">#ADFF2F</se:SvgParameter>
</se:Fill>
</se:TextSymbolizer>
</se:Rule>
<se:Rule>
<se:Name>Grass</se:Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>AREA_CODE</ogc:PropertyName>
<ogc:Literal>CED</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<se:MinScaleDenominator>65000</se:MinScaleDenominator>
<se:MaxScaleDenominator>150000</se:MaxScaleDenominator>
<se:PolygonSymbolizer>
<se:Name>Grass</se:Name>
<se:Fill>
<se:SvgParameter name="fill">#90EE90</se:SvgParameter>
<se:SvgParameter name="fill-opacity">0</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#6B8E23</se:SvgParameter>
<se:SvgParameter name="stroke-opacity"></se:SvgParameter>
<se:SvgParameter name="stroke-width">1.4</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">round</se:SvgParameter>
<se:SvgParameter name="stroke-linecap">round</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
<se:TextSymbolizer>
<se:Name>Grass</se:Name>
<se:Label>
<ogc:PropertyName>NAME</ogc:PropertyName>
</se:Label>
<se:Font>
<se:SvgParameter name="font-family">Sans-Serif</se:SvgParameter>
<se:SvgParameter name="font-style">normal</se:SvgParameter>
<se:SvgParameter name="font-size">20</se:SvgParameter>
<se:SvgParameter name="font-weight">bold</se:SvgParameter>
</se:Font>
<se:Fill>
<se:SvgParameter name="fill">#6B8E23</se:SvgParameter>
</se:Fill>
</se:TextSymbolizer>
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>
私は現在、このコード
import xml.etree.ElementTree as ET
from lxml import etree
# Run once per file
StyledLayerDescriptor = ET.Element("StyledLayerDescriptor",version="1.0",)
NamedLayer = ET.SubElement(StyledLayerDescriptor, "NamedLayer")
Name = ET.SubElement(NamedLayer, "Name")
Line_county_electoral_division_region"
UserStyle = ET.SubElement(NamedLayer, "UserStyle")
Name = ET.SubElement(UserStyle, "Name")"
FeatureTypeStyle = ET.SubElement(UserStyle, "FeatureTypeStyle")
# Run once per rule in file
Rule = ET.SubElement(FeatureTypeStyle, "Rule")
Name = ET.SubElement(Rule, "Name")
Line_county_electoral_division_region"
Title = ET.SubElement(Rule, "Title")
Abstract = ET.SubElement(Rule, "Abstract")
Filter = ET.SubElement(Rule, "Filter")
PropertyIsEqualTo = ET.SubElement(Filter, "PropertyIsEqualTo")
PropertyName = ET.SubElement(PropertyIsEqualTo, "PropertyName")
Literal = ET.SubElement(PropertyIsEqualTo, "Literal")
MinScaleDenominator = ET.SubElement(Rule, "MinScaleDenominator")
MaxScaleDenominator = ET.SubElement(Rule, "MaxScaleDenominator")
PolygonSymbolizer = ET.SubElement(Rule, "PolygonSymbolizer")
Fill = ET.SubElement(PolygonSymbolizer, "Fill")
Stroke = ET.SubElement(PolygonSymbolizer, "Stroke")
TextSymbolizer = ET.SubElement(Rule, "PolygonSymbolizer")
Label = ET.SubElement(TextSymbolizer, "Label")
PropertyName = ET.SubElement(Label, "PropertyName")
Front = ET.SubElement(TextSymbolizer, "Front")
Fill = ET.SubElement(TextSymbolizer, "Fill")
ET.SubElement(Fill, "CssParameter", name="fill")
ET.SubElement(Fill, "CssParameter", name="fill-opacity")
ET.SubElement(Stroke, "CssParameter", name="stroke")
ET.SubElement(Stroke, "CssParameter", name="stroke-opacity")
ET.SubElement(Stroke, "CssParameter", name="stroke-width")
ET.SubElement(Stroke, "CssParameter", name="stroke-linejoin")"
ET.SubElement(Stroke, "CssParameter", name="stroke-linecap")
ET.SubElement(Front, "CssParameter", name="font-family")
ET.SubElement(Front, "CssParameter", name="font-style")
ET.SubElement(Front, "CssParameter", name="font-size")
ET.SubElement(Front, "CssParameter", name="font-weight")
ET.SubElement(Fill, "CssParameter", name="fill")
Output = ET.ElementTree(StyledLayerDescriptor)
Output.write("SLD_Test.xml", xml_declaration=True, encoding='UTF-8')
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("SLD_Test.xml", parser)
tree.write("SLD_Test.xml", pretty_print=True)
Tを有します彼のコードはprint xmlツリーを生成するために働いています
私は名前空間を変更するだけでなく、XMLの構造を再フォーマットしようとしています。たとえば、バージョン1.0は認識できませんが、データの一部が必要です。
私はpythonとXMLの両方を手に入れようとしているので、完全な解決策を探しているわけではありません。どんな助けも素晴らしいだろう!私は質問から集まる何から有用なチュートリアル
[lxmlを使用してPythonでxmlから名前空間と接頭辞を削除する]の可能な複製(https://stackoverflow.com/questions/18159221/remove-namespace-and-prefix-from-xml-in-python-using-lxml) ) – stovfl
それは似ていますが、私は再構築する必要があります(正しい言葉であれば)XMLと1から新しいファイルに情報をコピーします。しかし、それは確かに有用に見えます! –