我有一个像这样的XML文件:
<caseData>
<entity type="case" name="1">
<attribute name="CASE_OPEN" value="false"/>
<attribute name="CASE_NUMBER" value=""/>
<attribute name="CASE_TYPE" value=""/>
</entity>
<caseData>
我需要更新CASE_NUMBER和CASE_TYPE的值。我唯一能做的就是:
_xd = new XmlDocument();
_xd.LoadXml(xmlTemplate);
var caseitem = _xd.GetElementsByTagName("entity")[0];
var childnodes = caseitem.ChildNodes;
foreach (XmlNode node in childnodes)
{
if (node.Attributes["name"].Value == "CASE_NUMBER")
{
node.Attributes["value"].Value = "11222";
}
if (node.Attributes["name"].Value == "CASE_TYPE")
{
node.Attributes["value"].Value = "NEW";
}
}
我想知道是否有更好的方法来做到这一点。 谢谢!
答案 0 :(得分:1)
另一种选择是使用LINQ to XML。它通常是一个更好的API:
var doc = XDocument.Parse(xmlTemplate);
var caseNumber = doc
.Descendants("attribute")
.Single(e => (string)e.Attribute("name") == "CASE_NUMBER");
caseNumber.SetAttributeValue("value", "11222");
如果这真的是一个模板,而你只是填补了空白,你可以很容易地从头开始创建它:
var attributes = new Dictionary<string, string>
{
{"CASE_OPEN", "false"},
{"CASE_NUMBER", "11122"},
{"CASE_TYPE", "NEW"}
};
var caseData = new XElement("caseData",
new XElement("entity",
new XAttribute("type", "case"),
new XAttribute("name", "1"),
AttributeElements(attributes)
)
);
AttributeElements
类似于:
private static IEnumerable<XElement> AttributeElements(
IReadOnlyDictionary<string, string> attributes)
{
return attributes.Select(x => new XElement("attribute",
new XAttribute("name", x.Key),
new XAttribute("value", x.Value)
));
}