解析没有节点的 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))
调用 - 它只是意味着如果您加载了一个保留可忽略空格的文档,它会在构建列表时忽略这些节点。
我是 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))
调用 - 它只是意味着如果您加载了一个保留可忽略空格的文档,它会在构建列表时忽略这些节点。