1

我需要创建一个看起来像这样的 xml 文件。

<Event id="Date - Event Name - Event Type">      
    <DogNumber id="dog id number">           
        <dogName id-"dog id number">dog name</dogName>               
        <dogBreed>dog breed</dogBreed>      
    </DogNumber>
</Event>

然后它会再次重复另一个事件,除了元素的不同值和属性。

<Event id="Date - Event Name - Event Type">      
    <DogNumber id="dog id number">           
        <dogName id-"dog id number">dog name</dogName>               
        <dogBreed>dog breed</dogBreed>      
    </DogNumber>
</Event>

我是使用 C# 创建 XML 文件的新手,并且无法正确地将属性添加到元素并让父节点和子节点与上面显示的相同。我需要能够从我的 C# 应用程序中查看这个文件,并且能够根据特定事件读取上面列出的所有值,然后是每个事件中的特定狗。选择哪个事件和选择哪只狗的标准可能取决于用户在 ComboBox 中的输入。我的计划是使用该getElementById方法。但是,我已经看到了很多不同的方法来做到这一点,以至于我很难决定什么是最好和最有效的方法。

4

5 回答 5

4

我认为读取/写入该 xml 文件的最简单方法是使用 XMLSerializer。这种方法还使您能够轻松绑定到数据(如果您使用 WPF 进行 UI)

创建可序列化的类:

    public class Event
    {
        [XmlAttribute]
        public string id { get; set; }

        [XmlElement]
        public DogNumber DogNumber { get; set; }
    }

    public class DogNumber
    {
        [XmlAttribute]
        public string id { get; set; }

        [XmlElement]
        public dogName dogName { get; set; }

        [XmlElement]
        public string dogBreed { get; set; }
    }

    public class dogName
    {
        [XmlAttribute]
        public string id { get; set; }

        [XmlTextAttribute]
        public string value { get; set;  }
    }

然后使用 XmlSerializer 反序列化(使用文件的示例):

        Stream input = File.OpenRead("C:\\test.xml");
        XmlSerializer serialier = new XmlSerializer(typeof(Event));
        Event newevent = serialier.Deserialize(input) as Event;
        input.Close();
于 2012-08-03T13:47:40.710 回答
2

检查 LINQ to XML。

这是一个非常快速的概述

微软

于 2012-08-03T13:44:56.093 回答
0

在 C# 中创建或读取 XML,您想使用XDocument 类(您在此 msdn 网站末尾有使用示例)

XDocument yourXml = null;

治疗后(添加节点等...),如果需要,您希望将 xml 保存在 file.xml 中

// verify if file not existing
if (!System.IO.File.Exists(@"yourName.xml"))
{
    // if file not exist, create xml file.
    FileStream fs = File.Create(@"yourName.xml");
    fs.Close();
}

// save your xml in xml file
yourXml.Save(@"yourName.xml");
于 2012-08-03T13:43:21.163 回答
0

当涉及到 XML 时,我正在寻找满足我需求的最佳方法是使用类进行序列化/反序列化。

例如,采用以下代码:

/// <summary>
/// Details on the destination of the shipment.
/// </summary>
[XmlRoot("destination")]
public class Destination
{
    List<Recipient> recipient { get; set; }
}

/// <summary>
/// Recipient details.
/// </summary>
[XmlRoot("recipient")]
public class Recipient
{

    /// <summary>
    /// Client Id of the recipient; only used if selected as the sort criterion.
    /// </summary>
    /// <remarks>Truncated after 30 characters.</remarks>        
    [XmlElement("client-id")]
    public string ClientID { get; set; } 

    /// <summary>
    /// Name of the individual receiving the shipment.
    /// </summary>
    /// <remarks>Truncated after 44 characters.</remarks>
    [XmlElement("contact-name")]
    public string ContactName { get; set; } 

    /// <summary>
    /// Name of the company.
    /// </summary>
    /// <remarks>Truncated after 44 characters.</remarks>
    [XmlElement("company")]
    public string Company { get; set; }

    ...

这将允许我将对象序列化为如下所示的 XML:

<destination>
     <recipient>
         <client-id></client-id>
         <contact-name></contact-name>
         <company></company>
         ...

我可以通过使用 XmlRoot 或 XmlElement 修饰符来控制如何创建 XML。在您的情况下,您可以使用[XmlAttribute("attributeName")]来指定属性。

您可以在此处阅读有关各种 XML 修饰符的更多信息:http: //msdn.microsoft.com/en-us/library/e123c76w

于 2012-08-03T13:40:25.477 回答
0

您可以尝试使用 XDocument,例如:

XDocument doc = new XDocument(new XElement("Event", new XAttribute("Id", youEventString),
    new XElement("DogNumber", new XAttribute("id", dogId),
    new XElement("dogName", new XAttribute("id", dogNumber), dogNname),
    new XElement("dogBreed", dogBreed)  
    )));
doc.Save(filename);

您可以在其中用适当的字符串替换 youEventString、dogId、dogNumber、dogName、dogBreed。还提供要保存文件的文件名。

祝你好运

于 2012-08-03T13:44:37.360 回答