2

私はxmlにかなり慣れていないので、以下のxmlファイルから値を読み取る/取得する方法がわかりません:

<?xml version="1.0" encoding="utf-8" ?>
<Jeopardy>
  <category name = 'People in Computing'>
<first points = '100' answer = 'Alan Turing'>Known as the questioner of the human   mind, this man is known for helping tell humans and computers apart.</first>
<second points = '200' answer = 'Grace Hopper'>This female pioneer of the COBOL computer programming language was an Admiral in the US Navy.</second>
<third points = '300' answer = 'Tim Berners-Lee'>Called the father of the world wide web, this man is the director of the W3C.</third>
<fourth points = '400' answer = 'Lawrence Lessig'>An American academic and political activist who founded the Creative Commons, this man lobbies for reduced legal restrictions on copyrights and trademarks in the technology sector.</fourth>
<fifth points = '500' answer = 'Ada Lovelace'>This woman, known as the world's first computer programmer was also a Countess.</fifth>
  </category>
</Jeopardy>

ひどい書式設定で申し訳ありません。正しく取得できません。

まず、このファイルを XDocument に読み込もうとしたところ、「コンテンツに空白以外を追加できません」という例外が発生しましたが、XmlDocument に読み込んだ場合は発生しませんでした。

名前の値を取得しようとする私のコード:

        string fileName = @"C:\Users\Kara\documents\visual studio 2010\Projects\Final Project\Final Project\Jeopardy.xml";

        XmlDocument doc = new XmlDocument();

        doc.Load(fileName);

        List<string> categories = new List<string>();

        XmlNodeList nList = doc.SelectNodes("/category/name");

        foreach (XmlNode node in nList)
        {
            categories.Add(node.ToString());
        }

悲しいことに、デバッグ中に nList のカウントがゼロになり、その理由がわかりません。すでにここにあるたくさんの質問と他の場所のチュートリアルを見てみましたが、イライラしています. 名前や他のノードから値を取得するにはどうすればよいですか? 誰かがこれを説明できますか?XDocument で空白以外のエラーが発生するのはなぜでしょうか?

4

3 に答える 3

7

doc.SelectNodes("/category/name")

1) 最初のノードはJeopardyでありcategory、2)name子要素ではなくカテゴリの属性であるため、ノードが見つかりません。

試す:doc.SelectNodes("/Jeopardy/category/@name")

このような:

foreach (XmlNode node in nList) {
  categories.Add(node.Value);
}
于 2013-01-08T03:36:12.463 に答える
4

ファイルのエンコーディングが、ドキュメントの読み込み方法で想定されるエンコーディングと一致していることを確認してください。通常、UTF8 は XML ファイルの優先エンコーディングです。

上記のように、次を使用できます。

doc.SelectNodes("/Jeopardy/category/name");

また

doc.SelectNodes("//category/name");

また

doc.SelectNodes("//name");
于 2013-01-08T03:39:41.543 に答える
1

XML ドキュメントを開く必要があります

 XmlDocument _document = new XmlDocument();
    byte[] bytes = File.ReadAllBytes(filePath);
   string xml = Encoding.UTF8.GetString(bytes);
    try
    {
    _document.LoadXml(xml);
    }
    catch (XmlException e)
    {
    //exception handling
    }                  

    var doc = (XmlDocument)_document.CloneNode(true);

    XmlNode node = doc.GetElementsByTagName("your child node name");

ノードを取得したら、それで必要なことを行うことができます

于 2016-07-29T07:05:03.007 に答える