如果属性不存在,如何创建属性?
/Document/Setup/Info/Att/Group[@name='Manu']/osis:Attr[@name='time']/@value
我的一些文档具有值属性,但大部分都没有。
XML(时间没有值属性):
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="http://www.ns.com/ns/ns">
<Setup>
<Info>
<FilePath>\\computer1\project\E2002307\E2002307.drg</FilePath>
<Att>
<Group class="custom" name="Manu" desc="attributes"
ord="6">
<Attr num="119" name="xyz" desc="zyx" type="s" ord="1" value="S355">
<Valid perm="e" max="100"/>
</Attr>
<Attr num="120" name="thick" desc="thick." type="r" ord="2" value="5">
<Valid perm="e" min="0" max="99999"/>
</Attr>
<Attr num="121" name="units" desc="units." type="s" ord="4" value="mm">
<Valid perm="e" expr="mm" max="80"/>
</Attr>
<Attr num="123" name="time" desc="minutes." type="r" ord="24">
<Valid perm="e" min="0"/>
</Attr>
<Attr num="124" name="X" desc="X direction." type="r" ord="11" value="3">
<Valid perm="e" min="0"/>
</Attr>
<Attr num="125" name="Y" desc="Y direction." type="r" ord="12" value="1">
<Valid perm="e" min="0"/>
</Attr>
</Group>
答案 0 :(得分:0)
您可以使用LINQ to XML执行此操作:
var doc = XDocument.Parse(xml);
var timeAttrs = from grp in doc.Descendants("Group")
where (string)grp.Attribute("name") == "Manu"
from attr in grp.Elements("Attr")
where (string)attr.Attribute("name") == "time" &&
attr.Attribute("value") == null
select attr;
foreach(var attr in timeAttrs)
{
attr.Add(new XAttribute("value", 1));
}
答案 1 :(得分:0)
稍微修改你的XPath,使它返回没有<Attr>
属性的value
元素,而不是返回属性本身:
/Document/Setup/Info/Att/Group[@name='Manu']/osis:Attr[@name='time' and not(@value)]
然后只需循环遍历XPath结果并根据需要添加属性:
XmlDocument doc;
.....
var query = "/Document/Setup/Info/Att/Group[@name='Manu']/osis:Attr[@name='time' and not(@value)]";
var nodes = doc.SelectNodes(query, xmlns);
foreach(XmlNode node in nodes)
{
XmlAttribute attr = doc.CreateAttribute("value");
attr.Value = "foo";
node.Attributes.Append(attr);
}