1

以下のコードでxmlファイルを読み込もうとしています。

<?xml version="1.0" encoding="utf-8" ?>

<files>
   <pdf_input infolder ="C:\Users\Lambo\Documents\Visual Studio 2010\Projects\test\test\testPdfIn"
              outfolder ="C:\Users\Lambo\Documents\Visual Studio 2010\Projects\test\test\testPdfOut"
              autonameappend="_new" />


   <word_file infolder =" C:\Users\Lambo\Documents\Visual Studio 2010\Projects\test\test\testPdfIn"
              outfolder ="C:\Users\Lambo\Documents\Visual Studio 2010\Projects\test\test\testPdfOut" />


   <pdf_file fileRequired="true" directory="" autonameappend="pdf" />


   <docx_file fileRequired="true" directory="" autonameappend="docx" />

   <!-- autonameappend: Such as: (copy) -->


   <doc_file fileRequired="true" removePicture="true" removeFormfield="true"  directory="" autonameappend="_new" />


</files>

しかし、どういうわけか私はそれを読むことができませんでした。これは、xmlファイルを読み取ろうとするために使用しているコードです。

public static void readConfig()
{
    try
    {
     //   StreamReader sr = new StreamReader("");
        XmlTextReader reader = new XmlTextReader("~/bin/config.xml");



        reader.MoveToContent();

        reader.ReadToDescendant("pdf_input");

        pdf_infolder = reader.GetAttribute("infolder");

        pdf_outfolder = reader.GetAttribute("outfolder");

        pdf_nameAppend = reader.GetAttribute("autonameappend");

        MessageBox.Show("two passed");



        word_outfolder = reader.GetAttribute("outfolder");          

        reader.ReadToNextSibling("pdf_file");
        pdf_required = Convert.ToBoolean(reader.GetAttribute("fileRequired"));
        pdf_newDirectoryV=reader.GetAttribute("directory");
        pdf_autoName = reader.GetAttribute("autonameappend");

        MessageBox.Show("3 passed");

        reader.ReadToNextSibling("docx_file");
        docx_required = Convert.ToBoolean(reader.GetAttribute("fileRequired"));
        docx_newDirectoryV=reader.GetAttribute("directory");
        docx_autoName = reader.GetAttribute("autonameappend");

        MessageBox.Show("4 passed");

        reader.ReadToNextSibling("doc_file");
        doc_required = Convert.ToBoolean(reader.GetAttribute("fileRequired"));
        doc_removePic = Convert.ToBoolean(reader.GetAttribute("removePicture"));
        doc_removeFF = Convert.ToBoolean(reader.GetAttribute("removeFormfield"));
        doc_newDirectoryV=reader.GetAttribute("directory");
        doc_autoName = reader.GetAttribute("autonameappend");

        reader.Close();

    //   MessageBox.Show("Success");

    //   MessageBox.Show("pdf_required is :" + pdf_required + "        pdf_newdirectory is :" + pdf_newDirectoryV + "End");

    }
    catch (Exception)
    {

        MessageBox.Show("reading config file failed, using default value instead" );
        restoreDefault();
    }
}

private static void restoreDefault()
{

  //  wordName = @"C:\Users\user\Documents\Visual Studio 2010\Projects\SecureWord\SecureWord\bin\Debug\Sample3.doc";
    pdf_required = true;
    pdf_newDirectoryV = "";
    pdf_autoName = "";

    docx_required = true;
    docx_newDirectoryV = "";
    docx_autoName = "";

    doc_required = true;
    doc_removePic = true;
    doc_removeFF = true;
    doc_newDirectoryV = "";
    doc_autoName = "";

}

}

Anyhelpは大歓迎ですたくさんありがとう!

4

4 に答える 4

4
new XmlTextReader("~/bin/config.xml")

チルダパス(正式には、「Webアプリケーションルートオペレーター」は、サーバーコントロールおよびその他のASP.NET対応ユーティリティでのみ機能します。パスが必要な場所では機能しません。

を使用Server.MapPathして、ファイルの物理的な場所を取得できます。

new XmlTextReader(Server.MapPath("~/bin/config.xml"))
于 2012-04-24T17:42:57.937 に答える
1

おそらく、相対 ASP.NET パスを物理パスに変換する必要があります。HttpServerUtility.MapPathを参照してください。

XmlTextReader reader = new XmlTextReader(Server.MapPath("~/bin/config.xml"));
于 2012-04-24T17:43:42.297 に答える
0

Linq2Xml の方が使いやすい

XDocument xDoc = XDocument.Load(....);
var dict = xDoc.Element("files")
    .Descendants()
    .ToDictionary(k=>k.Name,v=>v.Attributes().ToDictionary(ak=>ak.Name,av=>av.Value));

foreach (var item in dict)
{
    Console.WriteLine(item.Key+":");
    foreach (var attr in item.Value)
    {
        Console.WriteLine("\t"+attr.Key + "="+ attr.Value);
    }
}
于 2012-04-24T17:57:17.250 に答える
0

私は XmlTextReader を使用したことがありません。代わりにこれを使用すると、作業がはるかに簡単に思えます。

XmlDocument xDoc = new XmlDocument();
        xDoc.LoadXml("~path/mydoc.xml");
        foreach (XmlNode xNode in xDoc.ChildNodes)
        {
            //Do w.e
        }
于 2012-04-24T17:36:38.260 に答える