我的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
答案 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,那么它的可读性要高得多。