繁体   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