[英]Why XML node value not changes?
I have this XML: 我有这个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>
I need to change this element: 我需要更改此元素:
<BackgroundColor>FF000000</BackgroundColor>
To this: 对此:
<BackgroundColor>FFFFAAAA</BackgroundColor>
Here is the way I try to do it: 这是我尝试执行的方法:
XmlDocument doc = new XmlDocument();
doc.LoadXml(layoutXml);
XmlNodeList objNodeList = doc.SelectNodes("VectorLayerDefinition/VectorScaleRange/BackgroundColor");
objNodeList.InnerXml = "FFFFAAAA";
But the code above dosent works.What I do wrong here why the attitude not works? 但是上面的代码有效。我在这里做错了什么,为什么态度不起作用?
Using xml linq : 使用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");
}
}
}
I don't think you are going far enough down in your nodes. 我认为您在节点上的努力还不够。 I think you need something more like this.
我认为您需要更多类似的东西。
XmlNodeList objNodeList = doc.SelectNodes("VectorLayerDefinition/VectorScaleRange/AreaTypeStyle/AreaRule/AreaSymbolization2D/Fill");
objNodeList.selectSingleNode("BackgroundColor").innerXml= "FFFFAAAA";
Other wise your are trying to get a node inside VectorScaleRange that does not exist. 否则,您尝试在VectorScaleRange内获取一个不存在的节点。 Also you need the
selectSingleNode()
fucntion to grab the BackGroundColor
node out of the list of nodes inside Fill
. 另外,您还需要
selectSingleNode()
功能才能从Fill
内部的节点列表中获取BackGroundColor
节点。
Edited with the answer to your problem 用您的问题的答案进行编辑
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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.