我有这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<LayerDefinition version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-1.0.0.xsd">
<VectorLayerDefinition>
<ResourceId>ddddd</ResourceId>
<FeatureName>SHP_Schema:HydrographicPolygons</FeatureName>
<FeatureNameType>FeatureClass</FeatureNameType>
<Geometry>SHPGEOM</Geometry>
<VectorScaleRange>
<AreaTypeStyle>
<AreaRule>
<LegendLabel/>
<AreaSymbolization2D>
<Fill>
<FillPattern>Solid</FillPattern>
<ForegroundColor>FFABC7E9</ForegroundColor>
<BackgroundColor>FF000000</BackgroundColor>
</Fill>
<Stroke>
<LineStyle>Solid</LineStyle>
<Thickness>0</Thickness>
<Color>FFABC7E9</Color>
<Unit>Inches</Unit>
</Stroke>
</AreaSymbolization2D>
</AreaRule>
</AreaTypeStyle>
</VectorScaleRange>
</VectorLayerDefinition>
</LayerDefinition>
我需要更改此元素:
<BackgroundColor>FF000000</BackgroundColor>
对此:
<BackgroundColor>FFFFAAAA</BackgroundColor>
这是我尝试做的方式:
XmlDocument doc = new XmlDocument();
doc.LoadXml(layoutXml);
XmlNodeList objNodeList = doc.SelectNodes("VectorLayerDefinition/VectorScaleRange/BackgroundColor");
objNodeList.InnerXml = "FFFFAAAA";
但是,pantant上面的代码有效。为什么我的态度不起作用,我在这里做错了什么?
答案 0 :(得分:2)
使用xml linq:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication75
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XNamespace ns = doc.Root.GetDefaultNamespace();
XElement backgrounColor = doc.Descendants(ns + "BackgroundColor").FirstOrDefault();
backgrounColor.SetValue("FFFFAAAA");
}
}
}
答案 1 :(得分:1)
我认为您在节点上的进展还不够。我认为您需要更多类似的东西。
XmlNodeList objNodeList = doc.SelectNodes("VectorLayerDefinition/VectorScaleRange/AreaTypeStyle/AreaRule/AreaSymbolization2D/Fill");
objNodeList.selectSingleNode("BackgroundColor").innerXml= "FFFFAAAA";
否则,您尝试在VectorScaleRange中获取一个不存在的节点。此外,您还需要使用selectSingleNode()
功能才能将BackGroundColor
节点从Fill
内部的节点列表中取出。
答案 2 :(得分:0)
根据问题的答案进行编辑
XmlDocument doc = new XmlDocument();
doc.Load("texto.xml");
XmlNodeList objNodeList = doc.SelectNodes("/LayerDefinition/VectorLayerDefinition/VectorScaleRange/AreaTypeStyle/AreaRule/AreaSymbolization2D/Fill");
objNodeList.Item(0).SelectSingleNode("BackgroundColor").InnerXml = "FFFFAAAA";
doc.Save("texto.xml");