0

私はxmlファイルを持っています。これはそのファイルの一部です

1    <mainTerm>
2      <title> Abandonment </title>
3      <see> Maltreatment </see>
4    </mainTerm>
5    <mainTerm>
6      <title> Abasia <nemod>(-astasia) (hysterical) </nemod></title>
7      <code>F44.4</code>
8    </mainTerm>

私はたくさん持っていて<mainTerm>、それらすべてをループしています。要素のすべてのデータをコピーしましたが、6行目に到達すると問題が発生しました。そのすべてのコンテンツをコピーする方法は? 「Abasia (-astasia) (hysterical)」のように見える最後の文字列を取得する必要があります。

それはそのファイルで動作する私のアプリの一部です

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

            //Create XmlReaderSettings object
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreWhitespace = true;
            settings.IgnoreComments = true;

            //Create XmlReader object
            XmlReader xmlIn = XmlReader.Create(path, settings);

            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
if (xmlIn.ReadToDescendant("mainTerm"))
{
 do
 {
   xmlIn.ReadStartElement("mainTerm");                                                  

   nodes.Add(xmlIn.ReadElementContentAsString());                          

   nodes.Add(xmlIn.ReadElementContentAsString());                          

 } while (xmlIn.ReadToNextSibling("mainTerm"));
}
4

3 に答える 3

1

LINQ2XML を使用できます。xml 構造をルート ノード内にラップし、次のようにすべてのタイトル要素をフェッチするだけです。

var xmlSrc = @"<?xml version=""1.0"" encoding=""UTF-8""?><xml><mainTerm>
  <title> Abandonment </title>
  <see> Maltreatment </see>
</mainTerm>
<mainTerm>
  <title> Abasia <nemod>(-astasia) (hysterical) </nemod></title>
  <code>F44.4</code>
</mainTerm></xml>";

var xml = XDocument.Parse(xmlSrc);
var mainTerms = xml.Root.Elements("mainTerm").ToList();
var titles = mainTerms.Elements("title").ToList();
foreach (var title in titles)
{
    System.Console.WriteLine(title.Value);
}

出力は次のとおりです。

Abandonment 
Abasia (-astasia) (hysterical) 

これは、XPath や XmlReader よりもはるかに簡単です。


Descendants関数を使用すると、 mainTerm要素がルート要素である必要はありません。

var mainTerms = xml.Root.Descendants("mainTerm").ToList();

この行は、XML ドキュメントから任意のレベルですべてのmainTermを配信します!

于 2013-05-20T18:49:16.097 に答える