gpt4 book ai didi

c# - 如何在 C# 中处理 XML

转载 作者:IT王子 更新时间:2023-10-29 03:38:42 24 4
gpt4 key购买 nike

在 C# 2.0 中处理 XML 文档、XSD 等的最佳方法是什么?

使用哪些类等。解析和制作XML文档的最佳实践是什么等。

编辑:也欢迎 .Net 3.5 建议。

最佳答案

在 C# 2.0 中读写的主要方式是通过 XmlDocument 类完成的。您可以通过它接受的 XmlReader 将大部分设置直接加载到 XmlDocument 中。

直接加载 XML

XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");

从文件加载 XML

XmlDocument document = new XmlDocument();
document.Load(@"C:\Path\To\xmldoc.xml");
// Or using an XmlReader/XmlTextReader
XmlReader reader = XmlReader.Create(@"C:\Path\To\xmldoc.xml");
document.Load(reader);

我发现读取 XML 文档的最简单/最快的方法是使用 XPath。

使用 XPath 读取 XML 文档(使用允许我们编辑的 XmlDocument)

XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");

// Select a single node
XmlNode node = document.SelectSingleNode("/People/Person[@Name = 'Nick']");

// Select a list of nodes
XmlNodeList nodes = document.SelectNodes("/People/Person");

如果您需要使用 XSD 文档来验证 XML 文档,您可以使用它。

根据 XSD 模式验证 XML 文档

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd); // targetNamespace, pathToXsd

XmlReader reader = XmlReader.Create(pathToXml, settings);
XmlDocument document = new XmlDocument();

try {
document.Load(reader);
} catch (XmlSchemaValidationException ex) { Trace.WriteLine(ex.Message); }

在每个节点上针对 XSD 验证 XML(更新 1)

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd); // targetNamespace, pathToXsd
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);

XmlReader reader = XmlReader.Create(pathToXml, settings);
while (reader.Read()) { }

private void settings_ValidationEventHandler(object sender, ValidationEventArgs args)
{
// e.Message, e.Severity (warning, error), e.Error
// or you can access the reader if you have access to it
// reader.LineNumber, reader.LinePosition.. etc
}

编写 XML 文档(手动)

XmlWriter writer = XmlWriter.Create(pathToOutput);
writer.WriteStartDocument();
writer.WriteStartElement("People");

writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();

writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();

(更新 1)

在 .NET 3.5 中,您可以使用 XDocument 执行类似的任务。然而,不同之处在于您具有执行 Linq 查询以选择所需的确切数据的优势。通过添加对象初始值设定项,您可以创建一个查询,该查询甚至可以直接在查询本身中返回您自己定义的对象。

    XDocument doc = XDocument.Load(pathToXml);
List<Person> people = (from xnode in doc.Element("People").Elements("Person")
select new Person
{
Name = xnode.Attribute("Name").Value
}).ToList();

(更新 2)

.NET 3.5 中的一种好方法是使用 XDocument 创建 XML,如下所示。这使得代码以与所需输出类似的模式出现。

XDocument doc =
new XDocument(
new XDeclaration("1.0", Encoding.UTF8.HeaderName, String.Empty),
new XComment("Xml Document"),
new XElement("catalog",
new XElement("book", new XAttribute("id", "bk001"),
new XElement("title", "Book Title")
)
)
);

创造

<!--Xml Document-->
<catalog>
<book id="bk001">
<title>Book Title</title>
</book>
</catalog>

所有其他方法都失败了,您可以查看这篇 MSDN 文章,其中包含我在此处讨论的许多示例以及更多内容。 http://msdn.microsoft.com/en-us/library/aa468556.aspx

关于c# - 如何在 C# 中处理 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com