0

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);

ただし、想定どおりに同じものを出力するため、さらに混乱します。

4

4 に答える 4

1

コードをテストしたところ、次の場合に 1 が出力されることがわかりました

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

の場合は 0 を出力します。

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

完全に合法で正しい出力。

プロジェクトの BIN フォルダーの内容を削除しようとしましたか? 次に、プロジェクトを再構築し、これらのファイルがプロジェクトの一部である場合、テキスト ファイルと xml ファイルのプロパティが [新しい場合はコピー] または [常にコピー] に設定されていることを確認します。

于 2012-05-22T05:34:50.910 に答える
0

ほとんどの場合、テキスト ファイルには改行記号も含まれているため、文字列が異なっています。

于 2012-05-22T05:28:01.203 に答える
0

File.ReadAllText が実際に 1 文字だけを返すようにするにはどうすればよいでしょうか? デバッグ目的で出力するか、トリミングすることから始めます。

于 2012-05-22T05:28:03.640 に答える
0

あなたのコードをテストしたところ、問題なく動作しました。唯一の理由は、テキスト ファイルに 1 の後に新しい行が含まれていることです。if ステートメントの直前の新しい行を削除してみてください。使用する

fileString = fileString.Replace(Environment.NewLine,"");
  if(....) //your if
于 2012-05-22T05:57:44.373 に答える