C# 获取XML节点的innertext

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 {

当我尝试M Adeel Khalid kode时,我一无所获,尝试其他人时,我会出错。我错过了一些东西,但我不能珍惜它。我的代码是这样的。但我在子体上遇到了一个错误,说“xmlDocument不包含子体的定义”,正如您可能看到的,我对这一点非常陌生,所以请耐心听我说

 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
中的任何内容,请发表评论。可能出现重复的“我已经上下搜索了好几天”似乎不太可能。。。