获取XML节点的文本

时间:2017-02-13 05:29:28

标签: c# asp.net xml

当我尝试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;



            }

        }

3 个答案:

答案 0 :(得分:1)

你可以这样做。

    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;

我已经测试了这段代码。 希望它有所帮助。

答案 1 :(得分:1)

使用XPath选择正确的节点:

XmlDocument xml = new XmlDocument();
xml.LoadXml(@"
<Reservedele>
      <Component>
        <Type>Elektronik</Type>
        <Art>Wheel</Art>
        <Remarks>erter</Remarks>
        <Varenummer>2055</Varenummer>
        <OprettetAf>jg</OprettetAf>
        <Date>26. januar 2017</Date>
      </Component>
      <Component>
        <Type>Forbrugsvarer</Type>
        <Art>Bulb</Art>
        <Remarks>dfdh</Remarks>
        <Varenummer>2055074</Varenummer>
        <OprettetAf>jg</OprettetAf>
        <Date>27. januar 2017</Date>
      </Component>
</Reservedele>");

var Varenummer2055component = xml.SelectNodes("s/Reservedele/Component[Varenummer/text()='2055']/Remarks");

if (Varenummer2055component.Count == 1)
{
    var remarks = Varenummer2055component[0].InnerText;
}

答案 2 :(得分:0)

我认为LINQ to XML的扩展方法First非常简单,可以满足您的问题要求。

var document = XDocument.Load(pathTopXmlFile);
var remark = 
    document.Descendants("Component")
            .First(component => component.Element("Varenummer").Value.Equals("2055"))
            .Element("Remarks")
            .Value;
如果xml不包含First

的元素,

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;

为了保存新价值,您可以使用相同的&#34;方法&#34;并在设置新值后将其保存到同一文件

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文件数据的类,然后只使用序列化来加载数据并将数据保存到文件中。 Examples of XML Serialization