C# 获取XML节点的innertext
当我尝试M Adeel Khalid kode时,我一无所获,尝试其他人时,我会出错。我错过了一些东西,但我不能珍惜它。我的代码是这样的。但我在子体上遇到了一个错误,说“xmlDocument不包含子体的定义”,正如您可能看到的,我对这一点非常陌生,所以请耐心听我说C# 获取XML节点的innertext,c#,asp.net,xml,C#,Asp.net,Xml,当我尝试M Adeel Khalid kode时,我一无所获,尝试其他人时,我会出错。我错过了一些东西,但我不能珍惜它。我的代码是这样的。但我在子体上遇到了一个错误,说“xmlDocument不包含子体的定义”,正如您可能看到的,我对这一点非常陌生,所以请耐心听我说 protected void btnRetVare_Click(object sender, EventArgs e) { fldRetVare.Visible = true; try {
protected void btnRetVare_Click(object sender, EventArgs e)
{
fldRetVare.Visible = true;
try
{
functions func = new functions();
bool exists = func.checForMatch(txtRetVare.Text);
string myNumber = txtRetVare.Text;
if (Page.IsValid)
{
if (!exists)
{
txtRetVare.Text= "Varenummer findes ikke";
}
else
{
XmlDocument xmldoc = new XmlDocument();
//xmldoc.Load(Server.MapPath(map));
xmldoc.LoadXml(Server.MapPath(map));
//var Varenummer2055component = xmldoc.SelectNodes("s/Reservedele/Component[Varenummer/text()='"+txtRetVare+"']/Remarks");
//if (Varenummer2055component.Count == 1)
//{
// var remarks = Varenummer2055component[0].InnerText;
// txtRetBemærkninger.Text = remarks.ToString();
//}
string remarks = (from xml2 in xmldoc.Descendants("Component")
where xml2.Element("Varenummer").Value == txtRetVare.Text
select xml2.Element("Remarks")).FirstOrDefault().Value;
txtRetBemærkninger.Text = remarks;
}
}
你可以这样做
XDocument xdoc = XDocument.Load(XmlPath);
string remarks = (from xml2 in xdoc.Descendants("Component")
where xml2.Element("Varenummer").Value == "2055"
select xml2.Element("Remarks")).FirstOrDefault().Value;
我已经测试了这段代码。
希望有帮助。使用
XPath
选择正确的节点:
xmldocumentxml=newxmldocument();
xml.LoadXml(@)
Elektronik
轮
埃特
2055
jg
26.2017年1月
弗布鲁斯瓦勒
电灯泡
dfdh
2055074
jg
27.2017年1月
");
var Varenummer2055component=xml.SelectNodes(“s/Reservedele/Component[Varenummer/text()='2055']/备注”);
if(Varenummer2055component.Count==1)
{
var备注=varEnumer2055组件[0]。InnerText;
}
我认为的扩展方法首先
将足够简单,并满足您的问题要求
var document = XDocument.Load(pathTopXmlFile);
var remark =
document.Descendants("Component")
.First(component => component.Element("Varenummer").Value.Equals("2055"))
.Element("Remarks")
.Value;
如果xml不包含Varenummer=2055
如果xml文件中可能不存在给定的数字,则可以使用FirstOrDefault
扩展方法并添加对null
var document = XDocument.Load(pathTopXmlFile);
var component =
document.Descendants("Component")
.FirstOrDefault(comp => comp.Element("Varenummer").Value.Equals("2055"));
var remark = component != null ? component.Element("Remarks").Value : null;
对于保存新值,您可以使用相同的“方法”,并在设置新值后将其保存到同一文件中
var document = XDocument.Load(pathTopXmlFile);
var component =
document.Descendants("Component")
.FirstOrDefault(comp => comp.Element("Varenummer").Value.Equals("2055"));
component.Element("Remarks").Value = newValueFromTextBox;
document.Save(pathTopXmlFile);
还有一种方法,这种方法在您的特定情况下可能会有些过分,但如果您使用xml的其他值,它可能会很有用。这种方法是序列化
您可以创建表示xml文件数据的类,然后使用序列化将数据加载并保存到文件中 请参见编辑后的答案。它将为第一个节点获取备注的内部文本。如果您还需要
LINQ
中的任何内容,请发表评论。可能出现重复的“我已经上下搜索了好几天”似乎不太可能。。。