2017-07-27 68 views
-1

我创建的,看起来像这样一个XML文件.csv报告:IF语句困境

<Registration> 
    <REGISTRATIONID>1</REGISTRATIONID> 
    <TYPE>2</TYPE> 
</Registration> 
<Registration> 
    <REGISTRATIONID>2</REGISTRATIONID> 
    <TYPE>3</TYPE> 
</Registration> 

我怎样才能得到与值的字符串“真”,如果在XML文件中存在的<Registration>标记中至少有一个,如果没有则为“FALSE”。

对于仅仅让每个<REGISTRATIONID>的价值,我会做这个

string type = ""; 

foreach (CGXML.RegistrationRow rr in fisier.Registration) 
{ 
    type = rr.TYPE.ToString 
    sout.WriteLine(string.Concat(new string[] { "\"", type, "\"" })); 
} 

但不幸的是我目前的技能,我无法做甚至每个 <REGISTRATIONID>的“TRUE/FALSE”语句它的工作。 ..

所以,这个代码,或者我应该从哪里开始阅读来学习/理解这将是巨大的帮助。

谢谢你的时间。

回答

1

欢迎来到Stack Overflow!

首先你的xml是无效的。如果您发布的问题需要提供足够的信息,以便用户可以使用这些信息来复制您的方案。

无论如何想象这是你的文件:

<?xml version="1.0"?> 
<stuff> 
    <Registration> 
     <REGISTRATIONID>1</REGISTRATIONID> 
     <TYPE>2</TYPE> 
    </Registration> 
    <Registration> 
     <REGISTRATIONID>2</REGISTRATIONID> 
     <TYPE>3</TYPE> 
    </Registration> 
</stuff> 

这里是你怎么会看它。我正在根据TYPE节点的值决定真假。您可以使用代码为另一个节点执行此操作。您可以使用Linq来减少代码,但为了清晰起见,我保持简单。这里是将返回包含字符串中的方法“真”,如果任何TYPE节点具有2或3中的整个文件:

public static String SearchFile(string path) 
{ 
    var document = XDocument.Parse(File.ReadAllText(path)); 

    foreach (var thisRegistration in document.Element("stuff").Elements("Registration")) 
    { 
     var typeValue = thisRegistration.Element("TYPE").Value; 
     if (typeValue == "2" || 
      typeValue == "3") 
     { 
      return "True"; 
     } 
    } 

    return "False"; 
} 

下面是如何使用的代码:

var answer = SearchFile("PathToYourFile.xml"); // Replace with your filepath 
Console.WriteLine("Answer: {0}", answer); 
+0

等效LINQ版本SearchFile函数应该类似于:'XDocument.Parse(File.ReadAllText(path))。Element(“stuff”)。Elements(“Registration”)。选择(e => e.Element(“TYPE”)。 ).Any(type => type ==“2”|| type ==“3”)? “真”:“假”;' – Kedrzu