【问题标题】:Add more values to xml element向 xml 元素添加更多值
【发布时间】:2012-12-22 12:55:46
【问题描述】:

我有一个看起来像这样的 xml。我一直在尝试向 Author 元素添加更多值。

我是这样加载的:

XDocument cdata = XDocument.Parse(text);

这里是示例 xml:

<a xmlns="http://www" version="5.050">  
  <Books>
   <Author> Poe,Edgar Allen Homer Walden</Author>
   <Address></Address>
   <State></State>
 </Books>
 <SYSTEM type="OTHER">
   <ORGANIZATION id="" />
 </SYSTEM>
 <HMDA_INFO is_hoepa="N" is_hoepa_manual="N" />
</a>

只是旁注“a”不一定总是根元素名称,有时它是 b 或 c,所以我不能使用根名称。

尝试这样做以访问作者,但我得到序列不包含任何元素:

XDocument cdata = XDocument.Parse(text);
var addElement = cdata.Descendants("Books").First();
addElement.SetAttributeValue("Authors", "insert this.");

【问题讨论】:

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


    【解决方案1】:

    以下代码将访问作者节点

    var addElement = cdata.Descendants("Books").First();
    var authodNode = addElement.Element("Author")
    

    你可以在下面找到我做过的测试

    【讨论】:

    • 运行时出现错误提示序列不包含任何元素
    【解决方案2】:

    你有两个问题。首先是Author 是一个元素,而不是属性。其次 - 你忘记了在 a 元素中声明的命名空间:

    XDocument cdata = XDocument.Parse(text);
    XNamespace ns = "http://www";
    var books = cdata.Descendants(ns + "Books").First();
    var author = books.Element(ns + "Author"); 
    author.Value = "insert this." + authors.Value;
    

    或者,如果您只想为作者元素添加新属性:

    books.Element(ns + "Author").SetAttributeValue(ns + "Foo", "insert this.");
    

    【讨论】:

    • 我想在 'Poe,Edgar Allen' 之前的元素 Author 中添加更多值,但也要保留现有值。
    • 作者节点是主要 XML 的一部分。如果您在作者节点中看到值,那么它在 cdata 文档中。想保存吗?致电cdata.Save(fileName)
    • 您是否知道是否有办法在特定点删除部分 xml,对其进行编辑,然后将其重新附加到该位置?
    • @ERead 当然,有许多有用的方法,例如 ReplaceWith 用于替换节点内容,或 Remove 用于从 xml 中删除节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多