我有一个看起来像这样的xml文档:
<MyDataSet>
<Q>
<SKU> Unique Value </SKU>
<description> non unique </description>
</Q>
<Q>
...
</Q>
... any number of <Q> elements ...
</MyDataSet
我想在这个XML文档中搜索给定的SKU,并可以从那里访问父Q节点。每个SKU都是独一无二的。有没有办法干净利落地这样做?我想从给定的SKU中提取项目的描述。我应该补充一点,我正在使用C#
答案 0 :(得分:3)
如果您的XML包含在XDocument或类似的内容中,您可以简单地使用LINQ来执行您正在寻找的内容。这会产生第一个元素。
XDocument doc = XDocument.Load(filename); // Path to the XML file from the post.
XElement node = doc.Root.Elements("Q").Where(e => e.Element("SKU").Value == " Unique Value ").FirstOrDefault();
答案 1 :(得分:1)
您只需要使用LINQ,希望该示例可以帮助您:
XDocument document = XDocument.Load(filePath);
XElement wantedNode= document .Root.Elements("Q").Where(x => x.Element("SKU").Value == " Unique Value ").FirstOrDefault();
答案 2 :(得分:1)
如果您正在使用此文档做更多工作,则可能需要使用XmlSerializer。这是一些工作,但从长远来看会给你更好的表现和轻松。
使用模型
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class MyDataSet
{
private MyDataSetQ[] qField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Q")]
public MyDataSetQ[] Q
{
get
{
return this.qField;
}
set
{
this.qField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class MyDataSetQ
{
private string sKUField;
private string descriptionField;
/// <remarks/>
public string SKU
{
get
{
return this.sKUField;
}
set
{
this.sKUField = value;
}
}
/// <remarks/>
public string description
{
get
{
return this.descriptionField;
}
set
{
this.descriptionField = value;
}
}
}
那么这段代码
var serializer = new XmlSerializer(typeof(MyDataSet));
var xmlObject = (MyDataSet)serializer.Deserialize(STREAM);
STREAM可以是文件流或Web响应。它需要更多的工作设置,但如果你打算使用xml它是最好的方法。该类是使用具有PasteAsXml类型的vs gallery包制作的