更改XElement的值

时间:2013-07-31 02:42:16

标签: c# xml linq-to-xml xelement

我正在将XDocument中的代码从一种格式转换为另一种格式。我的代码如下所示:

        if (translate.Count > 0)
        {
            foreach (XElement element in xml.Descendants())
            {
                if (translate.ContainsKey(element.Value.ToLower()))
                    element.Value = translate[element.Value.ToLower()];
            }
        }

问题是,当我检查一个如下所示的XElement的值时:

<Element>
  <InnerElement>
    <Inner2Element>
      <TargetValue>F-01751</TargetValue> 
    </Inner2Element>
  </InnerElement>
</Element>

该值等于F-01751。如果我然后将其更改为新值,我的XML看起来像这样:

<Element>NewValue</Element>

有没有办法,使用XElement,一次解析一行XDocument而不是递归?或者,有没有办法检查被检查元素的值,而不是任何子元素?我知道我可以将它转换为XmlDocument,并实现这一点,但这似乎相当极端。有没有人有任何其他建议?

1 个答案:

答案 0 :(得分:3)

您应该查找文本子节点(使用NodeType = XmlNodeType.Text)并替换它们。这些将是XText类型:

        if (translate.Count > 0)
        {
            foreach (XText node in xml.Descendants().Nodes().OfType<XText>())
            {
                if (translate.ContainsKey(node.Value.ToLower()))
                    node.Value = translate[node.Value.ToLower()];
            }
        }