簡體   English   中英

如何從.net c#中的xml文件中獲取價值

[英]how to take value from xml file in .net c#

我有一個xml文件,我想使用linq.Xml來獲取內部文本,如下所示

<?xml version="1.0" encoding="utf-8" ?>
<testObject class="LN" version="16A" distName="CEL-1" id="456" xmlns="kaml20.xsd">
  <p name="rcc">424</p>
  <p name="kcc">02</p>
  <p name="testname">testobject</p>
</testObject>

而且我沒有執行以下代碼

private static string GetvalueNokia(XElement pin, string val)
{
    string fname="";
    try
    {
        //string location = pin.Descendants("cellName").Single().Value;

        //return pin
        //.Descendants("p")
        //.FirstOrDefault(x => x.Attributes().Any(a => a.Value.ToUpper() == val.ToUpper())).Value;
        ////.Attribute("value").Value;

        var data = from atts in pin.Elements("name")
                   select new
                   {
                       cell= (string)atts.Element("name")
                   };
     }
}

編輯我的密碼如下所示

<testObject class="LN" version="16A" distName="CEL-1" id="456" xmlns="kaml20.xsd">
  <p name="cellName">testname</p>
  <p name="rcc">424</p>
  <p name="kcc">02</p>
</testObject>

看起來您想獲取xml節點的內部文本,該文本在name屬性中具有特定值,如果正確,則可以嘗試以下代碼:

var data = (from node in pin.Descendants("name")
            where node.Attribute("name") !=null &&  node.Attribute("name").Value == value
           select new
           {
              AttributeValue = node.Attribute("name").Value,
              InnerText = node.Value
           });

我們需要首先過濾具有屬性name的節點,並結合使用包含作為輸入提供的值的節點。

如果要對xml nodes屬性中的輸入參數進行區分大小寫的比較,則可以使用String.Compare例如:

String.Equals(node.Attribute("name").Value, value,StringComparison.OrdinalIgnoreCase) 

並且如果pin是您試圖從中獲取name屬性值的元素,則只需以屬性名稱作為輸入調用它的Attribute方法,然后訪問Value屬性,例如:

private static string GetvalueNokia(XElement pin, string val)
{ 
  return pin.Attribute("name")?.Value;
}

希望能幫助到你!

問題是,當您調用Descendants("p")等時,由於父節點屬於特定的命名空間,因此無法獲得結果。

private static string GetValueNokia(XElement pin, string val)
{
    XNamespace ns = "kaml20.xsd";
    var paragraph = pin.Descendants(ns + "p").FirstOrDefault(
        p => p.Attributes("name").FirstOrDefault(a => a.Value == val) != null
    );
    return paragraph == null ? null : paragraph.Value;
}

您稱之為:

var pin = XElement.Parse(xml);
string val = "kcc";
Console.WriteLine(GetValueNokia(pin, val));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM