2009-09-18 29 views
7

を使用してXMLファイルからXML要素の抽出:は、私は次のXML文書を持っているのXPath

<MimeType> 
    <Extension>.aab</Extension> 
    <Value>application/x-authorware-</Value> 
    </MimeType> 
    <MimeType> 
    <Extension>.aam</Extension> 
    <Value>application/x-authorware-</Value> 
    </MimeType> 

文書全体では約700のエントリが含まれています。 XPathを使用して単一のMimeType要素を抽出し、強く型付けされたC#MimeTypeオブジェクトに埋め込むにはどうすればよいですか?

+2

を.NET 3.5を使用しないように強制されますか? .NET 3.5を使用することができれば、XDocumentとLinqをXmlに使用すると、XPathより簡単です。 –

+0

必ずしもそうではありません。両方の組み合わせを使用する方が良いです:http://stackoverflow.com/questions/1294386/is-there-an-xpath-equivilent-for-linq-to-xml – Ryall

+0

はい.net 2のコーナーに強制されます。 –

答えて

13

使用XmlDocument.SelectSingleNode

例:

string extension = node.ChildNodes[0].InnerText; 
string value = node.ChildNodes[1].InnerText; 

そしてあなたのMIMEタイプのオブジェクトを構築する際に、それらの値を使用します。

XmlDocument doc = new XmlDocument(); 
doc.Load("yourXmlFileName"); 
XmlNode node = doc.SelectSingleNode("yourXpath"); 

次に、あなたがしたい値(一例)を取得するためにnode.ChildNodesにアクセスすることができます。

編集:一部のXPath情報
本当に良いXPathチュートリアルがあります。herehereを試してみてください。 W3C recommendation自体は少し圧倒的かもしれません。
あなたたとえば、あなたは(rootがあなたのルート要素の任意の名前です)、文書の最初のMimeTypeのノードを選択するには、次のXPathを使用してみてください可能性が:

string xPath = "root/MimeType[1]" 

希望に役立ちます!

+0

ドーナツのスニペットですべてを集計しました!それ以上に難しいことはありません。 http://stackoverflow.com/questions/1440184/how-to-display-value-in-log-file-from-an-xml-file/1440642のSOの投稿への返信を確認することができます。エラー状態を示すより長いスニペット、見つからないときに返されるものなど – mjv

+0

okこれを実行します... XPathの例を得るチャンス?生意気ですみません? –

+0

うん、私の答えにいくつかのXPath情報(リンク+簡単な例)を追加しました。 – Donut

2

次のメソッドは、トリックは、拡張内のテキストに基づいてMIMEタイプを見つけることです、ここで

public MimeType RunXPath(string mimeType) 
{ 
    XmlNode node = _xmlDoc.SelectSingleNode(
    string.Format("//MimeType/Extension[text()="{0}"]/ancestor::MimeType", mimeType)); 
    foreach(XmlNode node in nodes) 
    { 
    // Extract the relevant nodes and populate the Mime Type here... 
    } 

    return ... 
} 

、この試合のためにMIMEタイプの祖先を取得するMIMEタイプを取得するためのフレームワークを提供する必要があります。

1

the answer by @MiffTheFoxにアップした後、あなたはXMLにLINQと一緒のXPathを使用することができます。サンプルデータに基づく例を以下に示します。

1)まず、あなたが必要とする名前空間:

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

2)XElementにあなたのXMLドキュメントをロードします。

XElement rootElement = XElement.Parse(xml); 

3)あなたのXPathを定義しますロケーションパス:

// For example, to locate the 'MimeType' element whose 'Extension' 
// child element has the value '.aam': 
// 
//  ./MimeType[Extension='.aam'] 

string extension = ".aam"; 
string locationPath = String.Format("./MimeType[Extension='{0}']", extension); 

4)関心の要素を選択するXPathSelectElement()に位置パスを渡す:

XElement selectedElement = rootElement.XPathSelectElement(locationPath); 

5)最後に、拡張子に関連付けられているMIMEタイプ値抽出:

var mimeType = (string)selectedElement.Element("Value"); 
関連する問題