提问者:小点点

更改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个答案

匿名用户

您应该查找文本子节点(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()];
            }
        }