解析没有节点的 XML - c#

Parse XML with no Nodes - c#

我是 XML 和 Linq 的新手,正在尝试将 XML 文件的内容读入列表。然而,该文件没有拆分成节点,我在网上看到了很多示例,它们都是单独的元素 - 请参见下面的示例。

<ProductProfile>
  <Version>1.3</Version>
  <ProductInfo>
    <PartNum>3354</PartNum>
    <Rev>343</Rev>
    <serialNum>2323</serialNum>
    <RevLevel>23243</RevLevel>
    <Products>8258</Products>
    <Description>8258 long</Description>
  </ProductInfo>
  <Customer>
    <Name>qwerty</Name>
  </Customer><ProductProfile/>

下面的代码 returns 内容,但它们都作为一个字符串而不是单独的项目添加到列表中。有什么方法可以将它们分开,还是我应该使用不同的方式来读取文件?

string pathfile = @"C:\filename";

        XPathDocument doc = new XPathDocument(pathfile);
        XPathNavigator nav = doc.CreateNavigator();

        // Compile a standard XPath expression
        XPathExpression expr;
        expr = nav.Compile("//");
        XPathNodeIterator iterator = nav.Select(expr);

        // Method to clear WPF textboxes
        loadClearGenerator();
        List<string> elementContents = new List<string>();
        try
        {
            while (iterator.MoveNext())
            {
                XPathNavigator nav2 = iterator.Current.Clone();
                elementContents.Add(nav2.Value.ToString());
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

假设您只是想获取列表中的所有 non-whitespace 文本节点值,我将只使用 LINQ to XML 而不是 XPath。这是一个完整的程序:

using System.Xml.Linq;

var doc = XDocument.Load("Test.xml");
var textNodeValues = doc
    .DescendantNodes()
    .OfType<XText>()
    .Select(text => text.Value)
    .Where(text => !string.IsNullOrWhiteSpace(text))
    .ToList();

foreach (string value in textNodeValues)
{
    Console.WriteLine(value);
}

样本输出XML(修改为有效XML):

1.3
3354
343
2323
23243
8258
8258 long
qwerty

在这种情况下,您甚至不需要 .Where(text => !string.IsNullOrWhiteSpace(text)) 调用 - 它只是意味着如果您加载了一个保留可忽略空格的文档,它会在构建列表时忽略这些节点。