我有这样的事情:
<group name="name1" ... >
<group name="name2" ... >
<image name="test1" ...>
<image name="test2" ...></image>
<group name="test98"...>
<image name="test67" ...>
<group name="test987"...>
<text name="asddd"...></text>
</group>
</image>
</group>
<group name="name22" ... >
<image name="test3" ...></image>
</group>
</image>
<image name="test4" ...>
<text name="asddd"...></text>
</image>
</group>
</group>
你可以看到没有组织。也不是固定的,既不是节点名也不是顺序。 我不知道我要改变什么节点。 (除了组和图像,它可能还有很多)
我想要的是克隆第一个节点,然后搜索特定属性以更改其值。他们中的一些人有一个名为“path”的属性,其他人只有一个叫做“left”。
您认为将xml转换为文本会更容易吗?
答案 0 :(得分:2)
将XML加载到XmlDocument
(或XDocument
)将使您能够使用XPath查询,并且可以非常轻松地找到属性名称,如下例所示。
public class StackOverflow_7276178
{
const string XML = @"<group name='name1' >
<group name='name2' >
<image name='test1' >
<image name='test2' ></image>
<group name='test98'>
<image name='test67' >
<group name='test987'>
<text name='asddd' path='myPath'></text>
</group>
</image>
</group>
<group name='name22' >
<image name='test3' left='myLeft'></image>
</group>
</image>
<image name='test4'>
<text name='asddd'></text>
</image>
</group>
</group>";
public static void Test()
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(XML);
foreach (XmlAttribute pathAttr in doc.SelectNodes("//@path"))
{
pathAttr.Value = pathAttr.Value + "_modified";
}
foreach (XmlAttribute leftAttr in doc.SelectNodes("//@left"))
{
leftAttr.Value = leftAttr.Value + "_modified";
}
Console.WriteLine(doc.OuterXml);
}
}