我想读取XML文件的单个元素并将其输出到aspx控件

时间:2012-11-30 19:26:46

标签: c# asp.net xml

我的XML看起来像这样:

<product id="1">
    <name>A thing</name>
    <description>This is what it's like</description>
</product>

我一直在寻找一个可能看起来像这样的例子:

string productID = 1;
XDocument productsXML = XDocument.Load("Products.xml");
for item in productsXML {
    if (item.ID == productID) {
        productNameLabel.Text = item.name;
    }
}

这个想法是,我将能够将单个xml子元素输出到.aspx页面。

A thing

这有意义吗?我一直在寻找几个小时的例子,我开始认为我需要更多的脚手架,但由于所有的例子都是如此不同,我不确定应该遵循哪一个!

那么,我如何获取单个XML子元素的内容,并将其输出到.aspx?拿这个:

<product id="1">
    <name>A thing</name>
    <description>This is what it's like</description
</product>

并输出:

A thing

2 个答案:

答案 0 :(得分:2)

您可以使用XPath(System.Xml.XPath

string value = productsXML.XPathSelectElement("//product[@id='1']/name").Value;

答案 1 :(得分:0)

在这种情况下,我同意L.B.的答案,因为它很简单。如果您喜欢Linq(我注意到您使用的是XDocument,这是一个Linq to XML对象),这里有一个替代解决方案:

XDocument productsXML = XDocument.Load("Products.xml");
        string item = productsXML.Elements("product")
                                 .Where(p => p.Attribute("id").Value == productID)
                                 .First()
                                 .Element("name").Value;

productsXML.Elements("product")这将获取文档中的所有产品节点 .Where(p => p.Attribute("id").Value == productID)这只会使id的产品节点与您的产品匹配 .First()由于.Where函数返回节点集合,因此会抓取第一个节点。
.Element("name").Value;这会在名为name的产品节点中找到一个元素并返回其值。

对于这样一个简单的模式,XPath似乎不那么冗长,但如果你不了解XPath就更难理解了。 Linq是更多的代码行(在这个例子中),但如果你不了解XPath,那么它的可读性要高得多。