解析EntityName时发生错误。第32行,第51位

时间:2015-03-30 02:11:33

标签: c# xml

我已经尝试了几种不同的方法,围绕使用XDocument类来加载我的xml文件。但是,此错误和其他变化已出现。如果我使用绝对路径,则会显示无法找到文件的错误。 问题是我的xml文件中包含英文和日文的组合。该链接应允许任何人查看xml文件。

这是我的代码和xml文件:

public partial class MainWindow : Window
{
    private string URLSource = "https://www.dropbox.com/s/nh3bfzvhpj6e3x1/JapanseEnglish.xml?dl=0";

    public MainWindow()
    {
        InitializeComponent();
        XMLViewer();
    }

    private void XMLViewer()
    {
        try
        {
            XDocument Doc = XDocument.Load(URLSource);
            var Kanji = from WordList in Doc.Descendants("Kanji")
                        select new
                        {
                            Word = WordList.Element("Kanji").Value
                        };

            foreach (var Word in Kanji)
            {
                JpnTxt.ItemsSource = Word.ToString();
            }
        }

        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
}

}

2 个答案:

答案 0 :(得分:1)

您使用的网址不包含XML文档,但包含HTML网页: https://www.dropbox.com/s/nh3bfzvhpj6e3x1/JapanseEnglish.xml?dl=0

您需要将dl的值更改为1,因此Dropbox将返回您的XML文档: https://www.dropbox.com/s/nh3bfzvhpj6e3x1/JapanseEnglish.xml?dl=1

答案 1 :(得分:0)

正如@Florian所说你应该使用第二个链接,但是你可能有读取unicode xml的问题,所以使用Request和ResponseStream会更好:

private string URLSource = "https://www.dropbox.com/s/nh3bfzvhpj6e3x1/JapanseEnglish.xml?dl=1";

private void XMLViewer()
{
        try
        {
            var request = (HttpWebRequest)WebRequest.Create(URLSource);
            var response = (HttpWebResponse)request.GetResponse();
            using (var stream = response.GetResponseStream())
            {

                using (var sr = new StreamReader(stream, true))
                {
                    XDocument Doc = XDocument.Load(sr);
                    var Kanji = from WordList in Doc.Descendants("Kanji")
                                select new
                                {
                                    Word = WordList.Element("Kanji").Value
                                };

                    foreach (var Word in Kanji)
                    {                            
                        JpnTxt.ItemsSource = Word.ToString();
                    }
                }
            }
     }

     catch (Exception e)
     {               
           MessageBox.Show(e.Message);
     }
}