如何从.net c中的xml文件获取值#

问题描述 投票:0回答:2

我有一个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>
c# linq linq-to-xml
2个回答
1
投票

看起来你想得到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;
}

希望能帮助到你!


0
投票

问题是,当你调用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));
© www.soinside.com 2019 - 2024. All rights reserved.