添加或更新 XML 个节点
Adding or Updating XML Node
我需要添加几个子节点或更新节点(如果它已经存在)。从下面的小示例中可以看出,我有一个节点有子节点,另一个没有。假设我有一个来自 SQL table 的定义,我想将值添加到节点。
XML
<workbook>
<datasources>
<column datatype='real' name='[CONTRACT_PAYMENT_AMT]' role='measure' type='quantitative'>
<desc>
<formatted-text>
<run>The amount being paid on the contract.</run>
</formatted-text>
</desc>
</column>
<column datatype='real' name='[CONTRACT_PAYMENT_DATE]' role='measure' type='quantitative'>
</column>
</datasources>
这是我必须获取名称属性的代码。列是可能包含数据类型、名称、角色和类型的 class。
IEnumerable<string> names = from Columns in XDocument.Load(path).Descendants("column")
select Columns.Attribute("name").Value;
foreach (string name in names)
{
}
这是该方法的开始。
我无法思考如何存储值并更新 XML 文档,或者只是查看每个节点并在它浏览文档时进行更新。有什么想法吗?
编辑 - 新代码将新值添加到当前 运行 节点但不添加新值..具有定义。
var document = XDocument.Load(path);
var elements = (from column in document.Descendants("column")
select new
{
AttributeName = column.Attribute("name").Value,
Run = column.Descendants("run").FirstOrDefault() ?? new XElement("run")
}).ToList();
foreach (var item in elements)
{
if (item.Run == null) continue;
else
{
item.Run.Value = GetVariable(item.AttributeName);
// Getvariable is the method that returns the definition
}
}
document.Save(path);
可以按以下逻辑点:
var document = XDocument.Load(path);
var elements = (from column in document.Descendants("column")
select new
{
AttributeName = column.Attribute("name").Value,
Parent = column,
Run = column.Descendants("run").FirstOrDefault()
}).ToList();
foreach(var item in elements)
{
XElement run;
if (item.Run == null)
{
run = new XElement("run");
item.Parent.Add(
new XElement("desc",
new XElement("formatted-text",
run
)
)
);
}
else
{
run = item.Run;
}
if(item.AttributeName == "BlaBlaOne")
{
run.Value = "Your definition here";
}
}
document.Save(path);
我需要添加几个子节点或更新节点(如果它已经存在)。从下面的小示例中可以看出,我有一个节点有子节点,另一个没有。假设我有一个来自 SQL table 的定义,我想将值添加到节点。
XML
<workbook>
<datasources>
<column datatype='real' name='[CONTRACT_PAYMENT_AMT]' role='measure' type='quantitative'>
<desc>
<formatted-text>
<run>The amount being paid on the contract.</run>
</formatted-text>
</desc>
</column>
<column datatype='real' name='[CONTRACT_PAYMENT_DATE]' role='measure' type='quantitative'>
</column>
</datasources>
这是我必须获取名称属性的代码。列是可能包含数据类型、名称、角色和类型的 class。
IEnumerable<string> names = from Columns in XDocument.Load(path).Descendants("column")
select Columns.Attribute("name").Value;
foreach (string name in names)
{
}
这是该方法的开始。
我无法思考如何存储值并更新 XML 文档,或者只是查看每个节点并在它浏览文档时进行更新。有什么想法吗?
编辑 - 新代码将新值添加到当前 运行 节点但不添加新值..具有定义。
var document = XDocument.Load(path);
var elements = (from column in document.Descendants("column")
select new
{
AttributeName = column.Attribute("name").Value,
Run = column.Descendants("run").FirstOrDefault() ?? new XElement("run")
}).ToList();
foreach (var item in elements)
{
if (item.Run == null) continue;
else
{
item.Run.Value = GetVariable(item.AttributeName);
// Getvariable is the method that returns the definition
}
}
document.Save(path);
可以按以下逻辑点:
var document = XDocument.Load(path);
var elements = (from column in document.Descendants("column")
select new
{
AttributeName = column.Attribute("name").Value,
Parent = column,
Run = column.Descendants("run").FirstOrDefault()
}).ToList();
foreach(var item in elements)
{
XElement run;
if (item.Run == null)
{
run = new XElement("run");
item.Parent.Add(
new XElement("desc",
new XElement("formatted-text",
run
)
)
);
}
else
{
run = item.Run;
}
if(item.AttributeName == "BlaBlaOne")
{
run.Value = "Your definition here";
}
}
document.Save(path);