【问题标题】:Create tag in XML with C#使用 C# 在 XML 中创建标签
【发布时间】:2018-02-08 08:38:51
【问题描述】:

我有一个非常令人沮丧的问题,我希望它实际上会非常简单。如果我在 XML 文件中的术语有误,请提前道歉。

基本上我有一个相当简单的 XML 文件,这里是一个节点的摘录:

<Attr num="108" name="Title" desc="The title of this file." type="s" ord="1" value="Test Title">

我可以相当容易地读取和写入节点的值键,但前提是值键存在。

我可以使用此代码将值写回文件:

XmlNode node = xmlDoc.SelectSingleNode("//ma:Attr[@name='Title']/@value", ns);
node.Value = partname.Text;
xmlDoc.Save(sympath);

但是,如果 XML 文件具有正确名称的节点,但没有值键,则它会失败。例如,在某些文件中,XML 如下所示:

<Attr num="108" name="Title" desc="The title of this file." type="s" ord="1">

因此,如果该节点尚不存在,我将尝试将value="something" 添加到该节点。有没有办法做到这一点?我可以添加子元素,但我只想在该字符串中添加值!

我已尝试寻找答案,但所有其他类似问题似乎都与添加或修改子元素有关。

谢谢你,
安德鲁

【问题讨论】:

标签: c# xml


【解决方案1】:

实际上,XmlElement.SetAttribute() 一个人完成了这项工作:

var node = (XmlElement)xmlDoc.SelectSingleNode("//ma:Attr[@name='Title']", ns);
node.SetAttribute("value", partname.Text);

选择父元素而不是属性,检查该元素中是否存在value 属性并采取相应措施,即添加属性或仅更新值:

var node = (XmlElement)xmlDoc.SelectSingleNode("//ma:Attr[@name='Title']", ns);
var attr = node.Attributes["value"];
if(attr != null)
{
    attr.Value = partname.Text;
}   
else 
{
    node.SetAttribute("value", partname.Text);
}

【讨论】:

  • 看起来像一些很棒的代码,但我无法让它工作。首先,我收到一个错误,因为如果值不存在,则 var attr 为 null。另外,我没有看到 node.setattribute。我尝试过使用 XmlAttribute...
  • @AndrewTaylor 抱歉,node 应该是 XmlElement 类型。如果SelectSingleNode 有可能返回null,那么您需要先检查返回值,然后再转换为XmlElement...
  • 好的,现在几乎可以工作了。如果价值仍然不存在,我会遇到麻烦。我试过使用 if node.hasattribute("value"),但它仍然返回 null 并抛出错误。还有指点吗?!很抱歉很痛苦
  • 此答案中的代码已经进行了检查,因此我不确定您如何调整此代码。希望现场演示可以帮助您更好地理解:dotnetfiddle.net/Dht4FC
  • 啊,其实你可以直接调用SetAttribute(),而不用先检查属性是否存在……答案更新了……还有demo
猜你喜欢
  • 2023-03-19
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多