我正在将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,并实现这一点,但这似乎相当极端。有没有人有任何其他建议?
答案 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()];
}
}