c# - 从 XML 文档中获取特定值
问题描述
我正在尝试从 XML 文档中获取一些值。
这是从DevExpress生成的 Xml 文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<XtraSerializer version="15.2.5.0">
<Items>
<Item1 SelectedStencils="" CanvasSizeMode="AutoSize" PageSize="40000,40000"
Theme="Office" ItemKind="DiagramRoot" Size="40000,40000">
<Children>
<Item1 ItemKind="DiagramShape" Size="100,75" Shape="BasicShapes.Rectangle"
Position="19500,19440"/>
<Item2 ItemKind="DiagramShape" Size="100,90" Shape="BasicShapes.Triangle"
Position="19540,19660"/>
<Item3 ItemKind="DiagramConnector" EndPoint="19590,19660"
BeginPoint="19550,19515" EndItem="1" BeginItem="0" Points="19550,19650
19590,19650" EndArrow="Filled90"/>
<Item4 ItemKind="DiagramShape" Size="100,75" Shape="BasicShapes.Rectangle"
Position="19940,19440"/>
<Item5 ItemKind="DiagramConnector" EndPoint="19940,19477.5"
BeginPoint="19600,19477.5" EndItem="3" BeginItem="0" Points=""
EndArrow="Filled90"/>
<Item6 ItemKind="DiagramConnector" EndPoint="19940,19477.5"
BeginPoint="19590,19660" EndItem="3" BeginItem="1" Points="19590,19525
19930,19525 19930,19478" EndArrow="Filled90"/>
</Children>
</Item1>
</Items>
</XtraSerializer>
我正在尝试从“DiagramConnector”部分获取值“BeginItem”和“EndItem”。
我尝试使用 DevExpress API BeginItem -- EndItem
获取这些值,但每次尝试时,这些值始终为 Null,即使在保存数据时,它在 XML 文档中也不为空。
所以我认为直接从 XML 文档中获取值是最好/唯一的方法。
这是我尝试从 xml 文档中获取值的方式。
请记住,可能有一百万个 DiagramConnection 对象。
class Program
{
static readonly string FolderLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Diagram Samples";
static readonly string FileName = "d.xml";
static void Main(string[] args)
{
string FullPath = System.IO.Path.Combine(FolderLocation, FileName);
using (XmlDocumentCreator xmlDocument = new XmlDocumentCreator(FullPath))
{
string data = xmlDocument.ReadDocument.ToString();
if (data.Contains("BeginItem") && data.Contains("EndItem"))
{
string xpath = "Items/Item1SelectedStencils/Children";
var nodes = xmlDocument.XMLDocument.SelectNodes(xpath);
foreach (XmlNode childrenNode in nodes)
{
Console.Write(childrenNode.SelectSingleNode("//BeginItem").Value);
}
}
}
Console.ReadKey();
}
}
这是我创建的 XML 文档类,
我知道它不适合这个项目,因为 SelectNodes 需要一个 XmlDocument,它只是用于测试。
class XmlDocumentCreator : IDisposable
{
public XmlDocument XMLDocument { get; set; }
// <summary>
/// XmlDocument Creator
/// </summary>
/// <param name="xmlDocumentPath">xmlPath</param>
public XmlDocumentCreator(string xmlDocumentPath)
{
XMLDocument = new XmlDocument();
XMLDocument.Load(xmlDocumentPath);
}
/// <summary>
/// Returns An Xml Document
/// Which Can Then Be Read.
/// </summary>
/// <returns></returns>
public XElement ReadDocument
{
get
{
if (XMLDocument != null)
{
return XElement.Parse(XMLDocument.InnerXml);
}
throw new Exception("XML Document Object Was Not Created");
}
}
/// <summary>
/// Will Dispose The XML Document
/// And Also Call The Garbage Collector.
/// </summary>
public void Dispose()
{
if (XMLDocument != null)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.SuppressFinalize(this);
GC.Collect();
Console.WriteLine("XML Document Object Disposed");
}
}
}
在一个完美的世界中,一旦我可以获得循环期间每个值所需的值,我就可以将它们放入匿名类型并对其进行任何处理。
解决方案
推荐阅读
- ssl-certificate - 在 Biztalk 中为 WCF-BasicHttp 发送适配器使用 SSL 证书
- c++ - 这个 shared_ptr 实现正确吗?
- google-apps-script - 尝试从 Google 表格中的给定 URL 中提取重定向 URL,仅打印重定向 URL
- html - Bootstrap 5 - 如何显示内联文本和进度条
- mocha.js - 使用 vue 3 和 vue 测试工具在测试中引用本机 UI 元素,而不向 UI 元素添加属性
- sql - 如何将时间格式转换为 YYYY:MM:DD(没有小时和分钟)
- java - 将 Array[ValueRange] 转换为 util.List[ValueRange]
- html - 如何在 Spring 中使用 WebMvcConfigurer 获取 CSS 文件
- python - keyPressEvent 不适用于 PyQt5 中的 Enter 键(但适用于其他所有键)
- microsoft-graph-api - 如何在创建订阅中创建 notificationUrl