如何从XML中获取值?

3
我正在制作一个小工具来检查XML文件中的物料编号。
我知道这对于您这些专家来说相当容易,因此我想请求您的帮助,让我开始处理这个问题。在我的计算机上,我安装了.NET 2.0框架和VS C# Express 2005。
我有一个包含物料数据的XML文件。它位于我的本地驱动器上。我现在能够浏览XML文件并将文件保存在一个字符串变量中。这就是我到目前为止所做的。
if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
    string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "Product.xml");

    string prodFile = files[0];
    ...
    ...

假设这是XML的结构:

<Record>
    <Product>
        <Material_Number>20209485</Material_Number> 
        <Product_Type>Type1</Product_Type>
        ...
        ...
    </Product>
</Record>

我该如何获取物料号码的值?

你已经有这个文件了还是想使用这个样式? - Moonlight
只有两个小注(也许你已经知道):Directory.GetFiles返回一个文件名的数组,而不是单个文件的内容。 - Hans Kesting
@Moonlight:我已经有这个文件了... - yonan2236
3个回答

3
你可以使用 XmlDocument 类将您的 XML 文件加载到 DOM 中。

MSDN - 该类实现了 W3C 文档对象模型(DOM)级别 1 核心和核心 DOM 级别 2。 DOM 是 XML 文档的内存 (cache) 树表示形式,并使得对该文档的导航和编辑成为可能。因为 XmlDocument 实现了 IXPathNavigable 接口,所以它也可以被用作 XslTransform 类的源文档。

示例

有很多方法来读取您的值。我真的鼓励您阅读 Working with Xml DOM

XmlNodeList list = xml.GetElementsByTagName("Product");
XmlAttributeCollection attr = list[0].Attributes;
string materialNumber = list[0].ChildNodes[0].InnerText;

或者

XmlNodeList list  = xml.GetElementsByTagName("Material_Number"); 
string materialNumber = list[0].InnerText;

更多信息


我不知道如何从元素中获取值,但是我理解了示例中的加载部分... - yonan2236

1
您还可以使用 XPathNavigatorXPathExpressionXmlDocument
var xmlDoc = new XmlDocument();
xmlDoc.Load("Product.xml") //or xmlDoc.LoadXml(xmlString);
var xmlNav = xmlDoc.CreateNavigator();
string materialNum;
var iterator = xmlNav.Select("/Record/Product/Material_Number");
if (iterator.MoveNext() && iterator.Current != null)
    materialNum = iterator.Current.Value;

如果您使用的是 .Net 3.0+,您可以使用 System.Xml.Linq.XDocument
var xdoc = XDocument.Load("Product.xml"); //or var xdoc = XDocument.Parse(xmlString);
var materialNum = xdoc.Root.Element("Product").Element("Material_Number").Value;

不行,.NET 2.0 不支持 XDocument。 - dknaack
@dknaack 是的,对此我感到抱歉,现在才意识到他指定了 .Net 2.0。 - jfiskvik
没问题。但是为了避免被踩,你应该更新或删除你的回答。 - dknaack

0

我找到了一个解决方案。虽然不太优雅...

XmlDocument xmlDoc= new XmlDocument(); 
xmlDoc.Load(@"C:\Product.xml");                 

XmlNodeList a = xmlDoc.GetElementsByTagName("Material_Number"); 
string materialNumber = a[0].InnerText;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接