改变xml字符串是最简单的方法

时间:2013-03-19 08:19:19

标签: c# xml dynamics-crm-2011

我从外部源获取fetchXml,我需要在其中插入一个属性。在这一刻,我正在做一个Q& D,将一个肯定存在于那里的属性与我想要添加的属性一起替换。

String fetchy = ...;
String surely = "<attribute name=\"entity_uno_id\" />";
String addity = "<attribute name=\"entity_duo_id\" />";
return fetchy.Replace(surely, surely + addity);

这很难看,也不专业。我能以更安全的方式重新设计吗?我无法控制向我提供的fetchXml。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

 string xmlString = ... // the whole xml string;
    var xml = XElement.Parse(xmlString);
    var xElement = new XElement(XName.Get("attribute", null));
    xElement.SetAttributeValue(XName.Get("name", null), "entity_duo_id");
    xml.Add(xElement);

答案 1 :(得分:0)

如果您可以控制接收的fetchXml,请将它们格式化为String.Format就绪格式。例如,如果您当前的字符串如下所示:

var xml = "<blah><attribute name='entity_uno_id' /></blah>"

将其更改为:

var xml = "<blah><attribute name='entity_uno_id' />{0}</blah>"

然后你可以添加你想要的任何东西:

String fetchy = ...;
String addity = "<attribute name='entity_duo_id' />";
return String.Format(fetchy, addity);

编辑1

假设您仍然可以控制给定的fetch xml,以便将{0}包含在xml的正确位置,则此扩展方法可以正常工作:

public static string AddAttributes(this string fetchXml, params string[] attributeNames)
{
    return String.Format(fetchXml, String.Join(String.Empty, attributeNames.Select(a => "<attribute name='" + a + "' />")));
}