从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性
Posted
技术标签:
【中文标题】从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性【英文标题】:Select specific xml node from xmlDocument then change xml node's attribute 【发布时间】:2010-09-07 21:58:25 【问题描述】:我在 C# 中的 xml 文档中有一个简单的 xml 节点,我想查询它,然后将 visible 属性的值设置为 false。下面是xml。我需要能够通过节点名称(DGField)和 text_id(Test.ChangeRank)来选择节点。有谁知道如何做到这一点?提前致谢。
<DGField text_id="Test.ChangeRank" template="Ranking" visible="true">
【问题讨论】:
【参考方案1】:假设您的 XmlDocument 被称为 doc,那么以下应该可以工作。
XmlNode node = doc.SelectSingleNode("//DGField[@text_id='Test.ChangeRank']");
if (node != null)
node.Attributes["visible"].Value = "false";
这可以通过更多的错误检查来确保被更改的属性存在等,但这样可以保持干净。
基本上,第一行使用 XPath 表达式来定位 text_id='Test.ChangeRank' 的 DGField 元素。如果找到,则返回节点,然后用于操作所需的属性值。
我在 XPath 查询中使用了“//”语法,以便搜索整个 Xml 文档,这不是最佳的,更具体的 XPath 可以更好地执行。例如,如果您有一个看起来像这样的完整文档
<root>
<DGFields>
<DGField text_id='1' template='Ranking' visible='true' />
<DGField text_id='Test.ChangeRank' template='Ranking' visible='true' />
</DGFields>
</root>
然后可以使用更具体的 XPath 查询,如下所示
XmlNode node = doc.SelectSingleNode(
"root/DGFields/DGField[@text_id='Test.ChangeRank']");
【讨论】:
【参考方案2】:有多种方法可以做到这一点。我认为使用 XmlDocument 和 Regex 是最好的选择。
这是 XML 方法:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"c:\myxml.xml");
XmlNode xn = xdoc.SelectSingleNode("//DGField[@text_id='Test.ChangeRank']");
xn.Attributes["visible"].Value = "false";
【讨论】:
以上是关于从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性的主要内容,如果未能解决你的问题,请参考以下文章
从 XmlDocument 中获取带有换行符的缩进 XML 的最简单方法是啥?
使用 System.Xml.XmlDocument 时是不是可以从 System.Xml.XmlNode 获取行号/位置?
c# xmldocument 获取特定节点之后的所有兄弟节点