2

次のようなXMLファイルがあり、Recordタグの属性が必要な場合にのみ、Nameタグのコンテンツを読み取ろうとしています。(以下のコードに続く)

XMLファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<Database>
  <Record Number="1">
    <Name>John Doe</Name>
    <Position>1</Position>
    <HoursWorked>290</HoursWorked>
    <LastMonthChecked>0310</LastMonthChecked>
  </Record>
  <Record Number="2">
    <Name>Jane Doe</Name>
    <Position>1</Position>
    <HoursWorked>251</HoursWorked>
    <LastMonthChecked>0310</LastMonthChecked>
  </Record>
</Database>

これは私がこれまでに持っているC#コードです:

 public static string GetName(int EmployeeNumber)
        {
            XmlTextReader DataReader = new XmlTextReader("Database.xml");
            DataReader.MoveToContent();
            while (DataReader.Read())
            {
                if (DataReader.NodeType == XmlNodeType.Element
                    && DataReader.HasAttributes && DataReader.Name == "Record")
                {
                    DataReader.MoveToAttribute(EmployeeNumber);
                    DataReader.MoveToContent();
                    if (DataReader.NodeType == XmlNodeType.Element
                        && DataReader.Name == "Name")
                    {
                      return DataReader.ReadContentAsString();
                    }
                }
            }
        }

したがって、たとえば、2が関数に渡された場合、文字列を返すようにします"Jane Doe"。私はXML解析に慣れていないので、助けていただければ幸いです。

ありがとう。

4

4 に答える 4

3

これにはXPathを使用します。

この記事を確認してください:http ://www.developer.com/xml/article.php/3383961/NET-and-XML-XPath-Queries.htm 。それはあなたの状況に非常に似ている例を持っています。

于 2010-03-16T08:38:47.933 に答える
1
string searchTerm = "2";

var list = from XElement segment in workingXmlDocument.Descendants(wix + "File")
           where segment.Attribute("Id").Value.ToString() == searchTerm
           select segment.Descendant("Name").Value;

これは、変数searchTermに基づいて名前を付けるLINQステートメントです。

于 2010-03-16T08:57:31.297 に答える
1

XMLがそれほど大きくない場合は、XPathを使用できます。

using System;
using System.Xml.Linq;
using System.Xml.XPath;

public class Program
{
    static void Main(string[] args)
    {
        var elements = XDocument.Load("Database.xml")
            .XPathSelectElements("//Record[@Number='2']/Name");
        foreach (var item in elements)
        {
            Console.WriteLine(item.Value);
        }
    }
}
于 2010-03-16T08:40:09.487 に答える
1
Could you try something like this:-

        public static string GetName(int EmployeeNumber)   
        {   
        XmlDocument doc = new XmlDocument(); 
        doc.Load("Database.xml"); 
        XmlElement rootNode = doc.DocumentElement; 

        String query ="Record[@Number='"+EmployeeNumber.ToString()+"']/Name"; 
        XmlNode data= rootNode.SelectSingleNode(query); 
        return data.InnerText; 
        } 
于 2010-03-16T08:45:26.017 に答える