【发布时间】:2018-05-18 12:21:33
【问题描述】:
我有一个如下所示的 xml,因为我想获得第二个 SubNetwork 元素值和 tval 值,所以这里第一行值是 NC22 和 tet_DS_U_6359_HolidayExpressInKV。我做了如下所示的 prtial 代码下面,如何获得每行的第二个SubNetwork 和tval 值,最后我将把它们放入字典中,其中tval 是关键。这是几GB 大小的大XML,我发布了一小部分
(XmlReader xr = XmlReader.Create(path))
{
string sitename = "";
xr.MoveToContent();
XNamespace xn = xr.LookupNamespace("tn");
while (xr.Read())
{
while (xr.NodeType == XmlNodeType.Element && xr.NamespaceURI == tn && xr.LocalName == "mentNode" && xr.GetAttribute("id") == "TRM")
{
try
{
XElement sniipet = (XElement)XNode.ReadFrom(xr);
var xdoc = new XDocument(sniipet);
var orders = (from r in xdoc.Descendants(tn + "manages")
select new
{
}).ToList();
}
catch (Exception ex)
{
}
}
}
}
XML如下图
<?xml version="1.0" encoding="utf-8" ?>
<tn:mentNode id="TRM">
<tn:attributes>
<tn:manages>SubNetwork=TRM_R,SubNetwork=NC22,tval=tet_DS_U_6359_HolidayExpressInKV,Element=1</tn:manages>
<tn:manages>SubNetwork=TRM_R,SubNetwork=NC22,tval=tet_DS_U_6352_MediaOneHtl,Element=1</tn:manages>
</tn:attributes>
</tn:mentNode>
编辑
虽然 XML 很大 <tn:mentNode id="TRM"> 节点并没有那么大,我可以在字典中保存
【问题讨论】:
-
所以你已经有了一些代码 - 会发生什么? (我怀疑我可以猜到,但这很棘手,因为我们不知道命名空间别名“tn”与哪个 URI 相关联。)我还强烈建议您删除那个空的 catch 块,或者至少将其更改为日志。如果出现错误,您可能想在那个时候停止处理,并且您几乎肯定想知道它而不是默默地忽略它。
-
我正在正确写日志,这是我在这里发布的小测试代码
-
Empty
catch子句——有史以来最糟糕的错误处理。 -
我已经告诉过,这是测试代码,XML 是大小为 5GB 的测试 XML,我在 catch 块中编写自定义日志
-
你为什么一再告诉我们这是一个大文件。我们明白并完全理解您为什么使用 XmlReader 来处理它。我个人不明白的是您的实际问题/问题是什么。