如何使用 XDocument 更新具有命名空间要求的现有 xml 文件?
How to use XDocument to update existing xml file which has namespace requirements?
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://a01_data_navin"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://a01_data_navin event.xsd">
<Event>
<eventid>1</eventid>
<Photo>
<filepath>files\images\memory rep02.png</filepath>
<location>
<lat>35.496456056584158</lat>
<lon>-99.228515625</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
<Event>
<eventid>2</eventid>
<Photo>
<filepath>files\images\poop.jpeg</filepath>
<location>
<lat>36.137874718407268</lat>
<lon>-89.6044921875</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
</Root>
当我在 C# 中使用 XDocument 时
XDocument xml = XDocument.Load(_xmlFilePath);
// create xml structure
var photo_XML = tempPhotoList.ToArray();
xml.Element("Root")?.Add(
new XElement("Event",
from photo in photo_XML
select new XElement("eventid", photo.EventId),
from photo1 in photo_XML
select new XElement("Photo",
new XElement("filepath", photo1.FileNameForPath),
new XElement("location",
new XElement("lat", photo1.GetLatitude()),
new XElement("lon", photo1.GetLongitude())),
new XElement("datetimestamp", photo1.DateTimeStamp)
))
);
当我 运行 上面的代码时,我似乎无法进入 xml 文件并迭代树。我必须像这样添加一个名称 space:
XDocument xml = XDocument.Load(_xmlFilePath);
// create xml structure
var photo_XML = tempPhotoList.ToArray();
xml.Element(NameSpace+"Root")?.Add(
new XElement("Event",
from photo in photo_XML
select new XElement("eventid", photo.EventId),
from photo1 in photo_XML
select new XElement("Photo",
new XElement("filepath", photo1.FileNameForPath),
new XElement("location",
new XElement("lat", photo1.GetLatitude()),
new XElement("lon", photo1.GetLongitude())),
new XElement("datetimestamp", photo1.DateTimeStamp)
))
);
加上Element(NameSpace+"Root")
;我能够遍历我的 xml 文件并添加一个新事件,但我最终得到了这个..
<Event xmlns="">
<eventid>3</eventid>
<Photo>
<filepath>files\images\poop.jpeg</filepath>
<location>
<lat>17.140790393316649</lat>
<lon>1.7578125</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
我需要一些帮助,了解如何将新事件添加或更新到现有 xml 文件中,该文件的名称 space 需要处理;在 C# 中使用 XDocument?似乎使用 XDocument 可以完成我的任务。
我卡住了伙计们..请帮忙..
尝试以下操作:
XDocument xml = XDocument.Load(_xmlFilePath);
XElement root = xml.Root;
XNamespace ns = root.GetDefaultNamespace();
root.Add(new XElement(ns + "Event",
大家好,这就是我解决手头问题的方法..
*我将名称空间添加到每个 XElement 而不是仅在根目录中。抱歉之前的菜鸟错误.. :P
XElement root = xml.Root;
XNamespace ns = root.GetDefaultNamespace();
root.Add(
new XElement(ns+"Event",
from photo in photo_XML
select new XElement(ns +"eventid", photo.EventId),
from photo1 in photo_XML
select new XElement(ns +"Photo",
new XElement(ns +"filepath", photo1.FileNameForPath),
new XElement(ns +"location",
new XElement(ns +"lat", photo1.GetLatitude()),
new XElement(ns +"lon", photo1.GetLongitude())),
new XElement(ns +"datetimestamp", photo1.DateTimeStamp)
))
);
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://a01_data_navin"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://a01_data_navin event.xsd">
<Event>
<eventid>1</eventid>
<Photo>
<filepath>files\images\memory rep02.png</filepath>
<location>
<lat>35.496456056584158</lat>
<lon>-99.228515625</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
<Event>
<eventid>2</eventid>
<Photo>
<filepath>files\images\poop.jpeg</filepath>
<location>
<lat>36.137874718407268</lat>
<lon>-89.6044921875</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
</Root>
当我在 C# 中使用 XDocument 时
XDocument xml = XDocument.Load(_xmlFilePath);
// create xml structure
var photo_XML = tempPhotoList.ToArray();
xml.Element("Root")?.Add(
new XElement("Event",
from photo in photo_XML
select new XElement("eventid", photo.EventId),
from photo1 in photo_XML
select new XElement("Photo",
new XElement("filepath", photo1.FileNameForPath),
new XElement("location",
new XElement("lat", photo1.GetLatitude()),
new XElement("lon", photo1.GetLongitude())),
new XElement("datetimestamp", photo1.DateTimeStamp)
))
);
当我 运行 上面的代码时,我似乎无法进入 xml 文件并迭代树。我必须像这样添加一个名称 space:
XDocument xml = XDocument.Load(_xmlFilePath);
// create xml structure
var photo_XML = tempPhotoList.ToArray();
xml.Element(NameSpace+"Root")?.Add(
new XElement("Event",
from photo in photo_XML
select new XElement("eventid", photo.EventId),
from photo1 in photo_XML
select new XElement("Photo",
new XElement("filepath", photo1.FileNameForPath),
new XElement("location",
new XElement("lat", photo1.GetLatitude()),
new XElement("lon", photo1.GetLongitude())),
new XElement("datetimestamp", photo1.DateTimeStamp)
))
);
加上Element(NameSpace+"Root")
;我能够遍历我的 xml 文件并添加一个新事件,但我最终得到了这个..
<Event xmlns="">
<eventid>3</eventid>
<Photo>
<filepath>files\images\poop.jpeg</filepath>
<location>
<lat>17.140790393316649</lat>
<lon>1.7578125</lon>
</location>
<datetimestamp>2020-03-29T00:00:00</datetimestamp>
</Photo>
</Event>
我需要一些帮助,了解如何将新事件添加或更新到现有 xml 文件中,该文件的名称 space 需要处理;在 C# 中使用 XDocument?似乎使用 XDocument 可以完成我的任务。
我卡住了伙计们..请帮忙..
尝试以下操作:
XDocument xml = XDocument.Load(_xmlFilePath);
XElement root = xml.Root;
XNamespace ns = root.GetDefaultNamespace();
root.Add(new XElement(ns + "Event",
大家好,这就是我解决手头问题的方法..
*我将名称空间添加到每个 XElement 而不是仅在根目录中。抱歉之前的菜鸟错误.. :P
XElement root = xml.Root;
XNamespace ns = root.GetDefaultNamespace();
root.Add(
new XElement(ns+"Event",
from photo in photo_XML
select new XElement(ns +"eventid", photo.EventId),
from photo1 in photo_XML
select new XElement(ns +"Photo",
new XElement(ns +"filepath", photo1.FileNameForPath),
new XElement(ns +"location",
new XElement(ns +"lat", photo1.GetLatitude()),
new XElement(ns +"lon", photo1.GetLongitude())),
new XElement(ns +"datetimestamp", photo1.DateTimeStamp)
))
);