我在解决如何在XML文档中添加元素时遇到了一些麻烦, 我想将热点信息添加到Id正确的xml中(所以id = 2添加热点信息)这是我当前的XML -
<Pages>
<Page>
<Id>1</Id>
<Title>TEST</Title>
<ContentUrl>Images\testimg.png</ContentUrl>
<Hotspots>
<Hotspot>
<X>140</X>
<Y>202</Y>
<Shape>Circle</Shape>
<TargetId>2</TargetId>
</Hotspot>
</Hotspots>
<ParentId>0</ParentId>
</Page>
<Page>
<Id>2</Id>
<Title>TEST2</Title>
<ContentUrl>Images\testimg2.jpg</ContentUrl>
<Hotspots>
</Hotspots>
<ParentId>1</ParentId>
</Page>
</Pages>
我希望更新xml,以便显示类似的内容 -
<Pages>
<Page>
<Id>1</Id>
<Title>TEST</Title>
<ContentUrl>Images\testimg.png</ContentUrl>
<Hotspots>
<Hotspot>
<X>140</X>
<Y>202</Y>
<Shape>Circle</Shape>
<TargetId>2</TargetId>
</Hotspot>
</Hotspots>
<ParentId>0</ParentId>
</Page>
<Page>
<Id>2</Id>
<Title>TEST2</Title>
<ContentUrl>Images\testimg2.jpg</ContentUrl>
<Hotspots>
<Hotspot>
<X>140</X>
<Y>202</Y>
<Shape>Circle</Shape>
<TargetId>2</TargetId>
</Hotspot>
</Hotspots>
<ParentId>1</ParentId>
</Page>
我到目前为止的代码是 -
XDocument Xdoc = XDocument.Load(@"Test.xml");
Xdoc.Root.Element("Pages").Elements("Page").Where(Page => Page.Value.Substring(0,Page.Value.IndexOf("-"))==CurrentPage.Id.ToString())
.FirstOrDefault()
.Add(new XElement("Hotspot",
new XElement("X", x),
new XElement("Y", y),
new XElement("Shape", "Circle"),
new XElement("TargetId", nNodeID)
));
Xdoc.Save(@"Test.xml");
(CurrentPage.Id是我希望与XML文档匹配的id,用于添加热点的位置 - Page.Value.IndexOf(“ - ”)返回xml中页面的Id)
但这只是在页面底部添加代码,所以我需要找到一种方法将其添加到XML的Hotspots部分中,其中正确的ID是。
任何帮助都会受到赞赏,如果有更好的方式来做我正在尝试的事情请告诉我,我之前从未真正使用过我的代码中的XML文档,并且最近才开始学习c#(在上个月内) )。
感谢。
答案 0 :(得分:1)
选择您需要的页面
XDocument xdoc = XDocument.Load("Test.xml");
int pageId = 2;
var page = xdoc.Descendants("Page")
.FirstOrDefault(p => (int)p.Element("Id") == pageId);
然后将内容添加到此页面元素(如果有):
if (page != null)
{
// add to Hotspots element
page.Element("Hotspots")
.Add(new XElement("Hotspot",
new XElement("X", x),
new XElement("Y", y),
new XElement("Shape", "Circle"),
new XElement("TargetId", nNodeID)));
xdoc.Save("Test.xml");
}
您的代码会向页面添加新的Hotspot元素,而不是向现有的Hotspots元素添加内容。