为什么XML节点的值不变?

时间:2018-10-23 13:25:45

标签: c# .net 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>

我需要更改此元素:

<BackgroundColor>FF000000</BackgroundColor>

对此:

<BackgroundColor>FFFFAAAA</BackgroundColor>

这是我尝试做的方式:

XmlDocument doc = new XmlDocument();
doc.LoadXml(layoutXml);
XmlNodeList objNodeList = doc.SelectNodes("VectorLayerDefinition/VectorScaleRange/BackgroundColor");

 objNodeList.InnerXml = "FFFFAAAA";

但是,pantant上面的代码有效。为什么我的态度不起作用,我在这里做错了什么?

3 个答案:

答案 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");