【问题标题】:Ignoring parent node in XML using XMLReader in C#在 C# 中使用 XMLReader 忽略 XML 中的父节点
【发布时间】:2014-07-25 14:25:45
【问题描述】:

我有一个 XML 文件,我必须从中提取一些特定节点并将它们放入 SQL 表中。

我正在使用 XmlReader 并在 XmlReader.Name 上有 switch case

这里只是一个示例,节点很少,仅用于说明。

<products>
   <product>
       <description>Nothing</description>
       <cost>$34.78</cost>
       <inventory>166</inventory>
   </product>
   <product>
       <description>Nike Cap 17893</description>
       <cost>$29.99</cost>
       <inventory>54</inventory>
   </product>
</products>

如果描述节点中没有任何内容,我应该忽略整个产品并转移到下一个产品。

我想在这种情况下使用 XmlReader.Skip(),但它似乎只跳过了子节点,但跳过了父节点。

只是想知道 C# 是否提供任何方法来忽略父节点?

【问题讨论】:

  • 这个 xml 文件有多大?你不能使用 Linq to XML 吗?
  • XML 文件通常包含 10,000 到 12,000 个产品
  • @bluepiranha:听起来您应该可以轻松地将其加载到内存中,这将使其比使用 XmlReader 更容易处理。
  • @JonSkeet 请原谅我的新手,但是当您说将其加载到内存中时,您建议我读取 XML 文件的 C# API 类是什么?
  • 按照 Selman22 的建议使用 LINQ to XML,例如XDocument doc = XDocument.Load("products.xml")

标签: c# xml


【解决方案1】:

使用 Linq To Xml,您可以轻松忽略所有“无”的元素,而只处理其他元素。

这是一个简单的例子。

XElement root = XElement.Load("file.xml");
IEnumerable<XElement> productsWithoutNothing = from product in root.Elements("product")
                                               where (string)product.Element("description") != "Nothing"
                                               select product;

【讨论】:

    【解决方案2】:

    我认为如果使用 XSL 过滤节点会容易得多。

    第 1 步:使用 XSL 获取具有描述的(父)节点列表

    第 2 步:遍历此过滤集

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多