gpt4 book ai didi

c# - 使用 C# 解析 XML 并从中获取元素

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:03 25 4
gpt4 key购买 nike

我有一个如下所示的 XML 文件:

<host>
<status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="128.208.188.2" addrtype="ipv4"/>
<address addr="00:19:D1:3D:65:85" addrtype="mac" vendor="Intel Corporate"/>
<hostnames>
<hostname name="d0slf4.phys.washington.edu" type="PTR"/>
</hostnames>
<times srtt="1000" rttvar="5000" to="100000"/>
</host>

<host>
<status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="128.208.188.3" addrtype="ipv4"/>
<address addr="3C:94:D5:AC:18:7D" addrtype="mac" vendor="Juniper Networks"/>
<hostnames>
<hostname name="xe-0-3-2-&#45;1378.uwar-atg-1.infra.washington.edu" type="PTR"/>
</hostnames>
<times srtt="92000" rttvar="92000" to="460000"/>
</host>

以上代码是一个大文件中两个对象的示例。我想获取文件中的所有主机,并为每个主机显示其名称、ipv4 地址和供应商。

过去一个小时我一直在搜索,虽然我找到了一些很好的例子,但没有一个完全符合我的需要(对不起,我是 XML 解析的新手)。

这是我一直在尝试的代码(不完整,因为我不知道下一步该去哪里):

string path = ""\\thor\test$\DataSubnetScans\" + _readableSubnet + ".xml";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);

XmlNodeList hosts = xmlDoc.GetElementsByTagName("host");
foreach (XmlNode host in hosts)
{
// get elements (FQDN, IPv4, Vendor)
XmlNodeList FQDN = this.GetElementsByTagName("hostname");
}

foreach 循环中的代码行是错误的,这只是一个猜测。正如您在上面看到的,我尝试创建一个包含所有元素的列表,然后为每个元素获取主机名、ipv4 地址和供应商。

我知道这与读取 <> 标签之间的文本有点不同,所以我必须使用类似 Attributes["name"].Value 的东西。

我不确定在 foreach 循环中使用 XmlNodeList 是否是执行此操作的方法,但是因为每个元素都有 2 个元素,所以我需要一种方法来单独选择它们。这样做应该允许我正确选择索引吗?

有人能帮我指明正确的方向吗?

非常感谢,如果您需要更多信息,请告诉我。

最佳答案

以下方法会有所帮助:

您可以通过以下方式检索信息:

foreach (XmlNode host in hosts) 
{
var hostname = ((XmlElement) host.SelectSingleNode("hostnames/hostname")).GetAttribute("name");
var ipv4Address = ((XmlElement) host.SelectSingleNode("address[@addrtype='ipv4']")).GetAttribute("addr");
var vendor = ((XmlElement) host.SelectSingleNode("address[@addrtype='ipv6']")).GetAttribute("vendor");
// Add to list
}

该示例假定您的 Xml 文档的结构始终相同,并且所有元素都包含在一个节点中。如果结构不同,您可能需要添加一些检查或优化 XPath 查询。

关于c# - 使用 C# 解析 XML 并从中获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253462/

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