Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Xlement中获取单独的值_C#_Xml_Linq - Fatal编程技术网

C# 如何从Xlement中获取单独的值

C# 如何从Xlement中获取单独的值,c#,xml,linq,C#,Xml,Linq,这是我试图解析的XML的一部分 <BRTHDATES> <BRTHDATE value="5/1/1963" code="B"/> </BRTHDATES> var birthdates = xmlDoc.XPathSelectElements("/INDV/PERSON/BRTHDATES").Elements().Where(e => e.Name == "BRTHDATE"); xe = birthdates.Elements().Wher

这是我试图解析的XML的一部分

<BRTHDATES>
  <BRTHDATE value="5/1/1963" code="B"/>
</BRTHDATES>

var birthdates = xmlDoc.XPathSelectElements("/INDV/PERSON/BRTHDATES").Elements().Where(e => e.Name == "BRTHDATE");

xe = birthdates.Elements().Where(e => e.Name == "BRTHDATE");
bbs = from b in birthdates
                      select new
                      {
                          Birthdays = b.FirstAttribute.Value,
                          Code = b?.Value
                      };

 var status = birthdates.Elements().Where(e => e.Name.LocalName == "BRTHDATE").Single().Value;

var birthdates=xmlDoc.XPathSelectElements(“/INDV/PERSON/BRTHDATES”).Elements()。其中(e=>e.Name==“BRTHDATE”);
xe=birthdates.Elements(),其中(e=>e.Name==“BRTHDATE”);
bbs=出生日期中的b
选择新的
{
生日=b.FirstAttribute.Value,
代码=b?值
};
var status=birthdates.Elements()。其中(e=>e.Name.LocalName==“BRTHDATE”).Single().Value;
当我试图从元素中获取“值”时,我得到一个空字符串。我无法获取“code”属性的任何内容

看起来这应该容易多了……

这是解决方案 您可以从Xml中选择特定元素。请尝试下面的示例代码

XmlNodeList generalTabNodeList = xmlDocument.SelectNodes("/INDV/PERSON/BRTHDATES");

foreach (XmlNode node in generalTabNodeList)
            {
                if (node.ChildNodes.Count > 0)
                {
                    string birthdate = !string.IsNullOrEmpty(node.ChildNodes[0].ToString()) ? node.ChildNodes[2].InnerText.ToString() : string.Empty;
                }
            }
这是解决办法 您可以从Xml中选择特定元素。请尝试下面的示例代码

XmlNodeList generalTabNodeList = xmlDocument.SelectNodes("/INDV/PERSON/BRTHDATES");

foreach (XmlNode node in generalTabNodeList)
            {
                if (node.ChildNodes.Count > 0)
                {
                    string birthdate = !string.IsNullOrEmpty(node.ChildNodes[0].ToString()) ? node.ChildNodes[2].InnerText.ToString() : string.Empty;
                }
            }

我不太明白你想做什么,但是,这应该会让你开始:

对于如下所示的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<INDV>
  <PERSON>
    <BRTHDATES>
      <BRTHDATE value="5/1/1963" code="B"/>
    </BRTHDATES>
  </PERSON>
</INDV>

您可以使用这些代码来了解您想要做什么。无论您做什么,都不要按位置选择属性,而是按名称选择属性。

我不太明白您想做什么,但是,这应该可以让您继续:

对于如下所示的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<INDV>
  <PERSON>
    <BRTHDATES>
      <BRTHDATE value="5/1/1963" code="B"/>
    </BRTHDATES>
  </PERSON>
</INDV>

您可以使用这些代码来了解您想要做什么。无论您做什么,都不要按位置选择属性,而是按名称选择属性。

您可以尝试下面的代码。我已经通过一个测试项目进行了测试,得到了所需的值

           string personBirthday = string.Empty;

            string soapResult = @"<?xml version=""1.0"" encoding=""utf - 8"" ?><INDV> <PERSON> <BRTHDATES><BRTHDATE value = ""5/1/1963"" code = ""B"" /> </BRTHDATES></PERSON></INDV> ";

            XmlDocument doc = new XmlDocument();
            doc.Load(new StringReader(soapResult));

            XmlNodeList person = doc.GetElementsByTagName("BRTHDATES");

            if (person[0].ChildNodes.Count > 0)
            {
                foreach (XmlNode item in person[0].ChildNodes)
                {
                    if (item.Name.Trim().Equals("BRTHDATE"))
                    {
                        personBirthday = !string.IsNullOrEmpty(item.Attributes[0].Value) ? item.Attributes[0].Value.Trim() : string.Empty;
                    }
                }
            }
string personbirth=string.Empty;
字符串soapResult=@“”;
XmlDocument doc=新的XmlDocument();
文档加载(新StringReader(soapResult));
XmlNodeList person=doc.GetElementsByTagName(“BRTHDATES”);
如果(人员[0].ChildNodes.Count>0)
{
foreach(个人[0]中的XmlNode项。ChildNodes)
{
if(item.Name.Trim().Equals(“BRTHDATE”))
{
PersonBirth=!string.IsNullOrEmpty(item.Attributes[0].Value)?item.Attributes[0].Value.Trim():string.Empty;
}
}
}

您可以尝试下面的代码。我已经通过一个测试项目进行了测试,得到了所需的值

           string personBirthday = string.Empty;

            string soapResult = @"<?xml version=""1.0"" encoding=""utf - 8"" ?><INDV> <PERSON> <BRTHDATES><BRTHDATE value = ""5/1/1963"" code = ""B"" /> </BRTHDATES></PERSON></INDV> ";

            XmlDocument doc = new XmlDocument();
            doc.Load(new StringReader(soapResult));

            XmlNodeList person = doc.GetElementsByTagName("BRTHDATES");

            if (person[0].ChildNodes.Count > 0)
            {
                foreach (XmlNode item in person[0].ChildNodes)
                {
                    if (item.Name.Trim().Equals("BRTHDATE"))
                    {
                        personBirthday = !string.IsNullOrEmpty(item.Attributes[0].Value) ? item.Attributes[0].Value.Trim() : string.Empty;
                    }
                }
            }
string personbirth=string.Empty;
字符串soapResult=@“”;
XmlDocument doc=新的XmlDocument();
文档加载(新StringReader(soapResult));
XmlNodeList person=doc.GetElementsByTagName(“BRTHDATES”);
如果(人员[0].ChildNodes.Count>0)
{
foreach(个人[0]中的XmlNode项。ChildNodes)
{
if(item.Name.Trim().Equals(“BRTHDATE”))
{
PersonBirth=!string.IsNullOrEmpty(item.Attributes[0].Value)?item.Attributes[0].Value.Trim():string.Empty;
}
}
}

只是一个注释。据我所知,XML规范中没有规定属性顺序(有规范/规范顺序(按名称的字母顺序)),但很少使用(在文档中也没有使用)。按顺序挑选属性最终会咬到你。您是否考虑过使用elements
Attributes
集合?您需要的是decentant而不是elements。您需要一个属性“value”:var status=birthdates.subjections()。其中(e=>e.Name.LocalName==“BRTHDATE”)。选择(x=>(string)x.attribute(“value”)。FirstOrDefault();只是一张纸条。据我所知,XML规范中没有规定属性顺序(有规范/规范顺序(按名称的字母顺序)),但很少使用(在文档中也没有使用)。按顺序挑选属性最终会咬到你。您是否考虑过使用elements
Attributes
集合?您需要的是decentant而不是elements。您需要一个属性“value”:var status=birthdates.subjections()。其中(e=>e.Name.LocalName==“BRTHDATE”)。选择(x=>(string)x.attribute(“value”)。FirstOrDefault();OP想要Linq而这不是Linq。OP想要Linq而这不是Linq。OP想要Linq而这不是Linq。@jdweng:我很好奇你怎么知道OP“想要Linq”。他的问题是“如何从Xlement中获得单独的值”。然后他谈到“我正在尝试解析的XML的一部分”。然后他谈到“尝试从元素中获得‘价值’”。如果我在这个页面上搜索“linq”,第一个匹配项就是你的评论。我的代码使用XDocument(显式)和XElement/XAttribute(隐式)。我还使用LINQ的
Where
方法。我不使用C#查询语法(就像他那样)。然而,他的“bbs”变量(他从LINQ获得)后来没有被使用,所以我不知道为什么会出现。哦,我的代码编译并运行。这几乎是一个极小的谴责,帖子上贴着Linq。Op want Linq,而这不是Linq。@jdweng:我很好奇你是怎么知道Op“want Linq”的。他的问题是“如何从Xlement中获得单独的值”。然后他谈到“我正在尝试解析的XML的一部分”。然后他谈到“尝试从元素中获得‘价值’”。如果我在这个页面上搜索“linq”,第一个匹配项就是你的评论。我的代码使用XDocument(显式)和XElement/XAttribute(隐式)。我还使用LINQ的
Where
方法。我不使用C#查询语法(就像他那样)。然而,他的“bbs”变量(他从LINQ获得)后来没有被使用,所以我不知道为什么会出现。哦,我的代码编译并运行。这几乎是一个最小的改动,帖子被标记为Linq。这将一直有效,直到属性的顺序被洗牌。请记住,XML不一定尊重属性顺序,直到属性顺序被打乱为止。记住,XML是可以的