2

我的 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
4

2 回答 2

2

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

string value = productsXML.XPathSelectElement("//product[@id='1']/name").Value;
于 2012-11-30T19:31:31.257 回答
0

在这种情况下,我同意 LB 的回答,因为它相当简单。如果您喜欢 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")这将获取文档中的所有产品节点。这只会获取与您的 productiD 匹配
.Where(p => p.Attribute("id").Value == productID)的产品节点。由于该函数返回一个节点集合,因此它会抓取第一个节点。这会在产品节点中找到一个被调用的元素并返回它的值。id
.First().Where
.Element("name").Value;name

对于这样一个简单的模式,XPath 似乎不那么冗长,但如果您一开始不了解 XPath,则有点难以理解。Linq 的代码行数更多(在本例中),但如果您不了解 XPath,它的可读性会更高。

于 2012-11-30T19:55:37.820 回答