【问题标题】:Changing the Value of an XElement更改 XElement 的值
【发布时间】:2013-07-31 02:42:16
【问题描述】:

我正在将 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,并完成此操作,但这似乎相当极端。有人有其他建议吗?

【问题讨论】:

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


    【解决方案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()];
                }
            }
    

    【讨论】:

    • 这正是我所需要的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2015-05-16
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多