简体   繁体   English

为什么XML节点的值不变?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM