“如果”和“否则”C# 无法正确输出

本文关键字:输出 如果 否则 | 更新日期: 2023-09-27 18:34:57

>我有一个应用程序将 xml 文件与文本文件进行比较,如果 xml 的特定行的内容与文本文件相同,则程序输出 1,但如果它们不同,则输出 0。不幸的是,我无法让它输出 1。它似乎总是输出 0。

法典:

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);
不过,他们

确实输出了同样的东西,就像他们应该输出的那样,这让我更加困惑。

“如果”和“否则”C# 无法正确输出

我测试了您的代码,我看到它在以下情况下输出 1

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

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

完全合法和正确的输出。

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

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

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

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

如何确保 File.ReadAllText 确实只返回一个字符?首先输出它以进行调试,或对其进行修剪。