2012-05-22 42 views
0

我有一个应用程序将xml文件与文本文件进行比较,如果xml的特定行的内容与文本文件相同,则程序输出1,但是如果它们是不同的,它输出0.1 Unfortunatley我无法得到它的输出1.它似乎总是输出0“If”和“else”C#不能正确输出

代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 



namespace CompareIt 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (XmlReader reader = XmlReader.Create("2.xml")) 
      { 
       while (reader.Read()) 
       { 
        if (reader.NodeType == XmlNodeType.Element) 
        { 
         if (reader.Name.ToLower() == "data") 
         { 
          string xml = reader.ReadOuterXml(); 

          var xmlString = (from data in XDocument.Parse(xml).Elements() 
              select data.Elements().First().Value).FirstOrDefault(); 

          xmlString = xmlString.Replace("\n", "").Trim(); 

          var fileString = File.ReadAllText(@"8.txt"); 
          if (xmlString == fileString) 
           Console.WriteLine("1"); 
          else 
           Console.WriteLine("0"); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

XML文件(该程序应该只读取数据部分):

<?xml version="1.0"?> 
    <root> 
    <Data> 
     <Seperator>1</Seperator> 
    </Data> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
     <Reference URI=""> 
      <Transforms> 
      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> 
      </Transforms> 
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
      <DigestValue>GHOSJRUqcHnZ3M090/5/KhvghyQ=</DigestValue> 
     </Reference> 
     </SignedInfo> 
     <SignatureValue>oib+LAXqJshDFm3YM63qkSsJxxF+t0uahGax8tLrjSPJUjW045iYvB4LJCgMeF9oxatbWnVB9hGbvtVnl4iewJDL3kjnjvot5CLozMOaIGJgdys5MP8ncx771itANTm8wi8KgnqVjGjvTakEmcdwcSdRXuCP1WGOwuXm5StkY8Q=</SignatureValue> 
    </Signature> 
    </root> 

和文本文件只包含:

1 

当我做Console.WriteLine(fileString);

Console.WriteLine(xmlString); 

他们做输出同样的事情,不过,像他们应该,这让我困惑,甚至更多。

+1

您是否附加了调试器来查看? – leppie

回答

0

我测试了你的代码,它工作正常,唯一的原因可能是你的文本文件在1之后包含新行。你可以尝试在if语句之前删除新行。使用

fileString = fileString.Replace(Environment.NewLine,""); 
    if(....) //your if 
+0

谢谢!我不相信我没有意识到这一点。 – User093203920

0

很可能您的文本文件也包含换行符号,从而使字符串不同。

0

如何确保File.ReadAllText真的只返回一个字符?开始输出它用于调试目的,或修剪它。

1

我测试你的代码,我看到它输出1时

<Data> 
    <Seperator>1</Seperator> 
</Data> 

它输出0时

<Data> 
    <Seperator>0</Seperator> 
</Data> 

完全合法的和正确的输出。

您是否尝试删除项目的BIN文件夹的内容?然后重建您的项目,并确保文本文件和xml文件属性设置为“复制如果较新”或“始终复制”,前提是这些文件是您的项目的一部分。