2017-03-14 18 views
0

処理命令を含むXML文書があります。私はXmlDocumentクラスで、あなたはXDocumentを使用して処理命令を取得する

var node = xmlDoc.SelectSingleNode("processing-instruction('xml-stylesheet')") as XmlProcessingInstruction; 

を使用することができることを知っているが、私はXDocumentを使用します。これどうやってするの?私はXDocumentクラスとXMLファイルのノードにアクセスする方法

var node = xDoc.Root.Nodes().OfType<XProcessingInstruction>().First(); 

答えて

1

これは、次のとおりです。

+0

こんにちは、処理命令はノード名を持たないため、このコードでは動作しないと思われる特別なタイプのノードです。 – sirdank

+0

@sirdank私はアップデートを投稿しました。 – Innat3

0

は、ここに1つの方法です。
しかし、あなたはそれでやりたいことについてより具体的にする必要があります。

XDocument doc = XDocument.Load("filepath"); 
var node = doc.Nodes().OfType<XElement>().SingleOrDefault(n => n.Name == "node name"); 
var node_value = node.Value; 
var node_descendants = node.Descendants(); 

UPDATE:あなたは気づいているかもしれませんが

はあなたが代わりに対応するIEnumerableをコレクションからそれを取得、または必要があるでしょうしたいノードを取得するために、実際には、XDocumentにはSELECTSINGLENODEありません事前に定義されたFirstNodeNEXTNODEPreviousNodeLastNodeから、しかし、あなたはそれらに任意のフィルタを適用することはできません。あなたは、いくつかののProcessingInstructionを取得し、同様にこれらをフィルタ処理する必要があることが予想される場合は処理命令ノードが

var pI_nodes = doc.Nodes().OfType<XProcessingInstruction>(); 

そして

var pI_nodes = (from node in doc.Nodes() 
       where node.NodeType == System.Xml.XmlNodeType.ProcessingInstruction 
       select node); 

です取得することが唯一の方法、ノード名に相当だろうターゲットプロパティ

var filtered_pIs = pI_nodes_1.Where(pI => pI.Target == "xml-stylesheet"); 

最後に、処理命令の値はデータプロパティに格納されています。私が思う

string pI_value = filtered_pIs.First().Data 
+0

'xmlDoc.SelectSingleNode( "処理命令( 'XML-スタイルシート')")' xDoc.Nodes() 'と同等です。OfType ()。そのように、まず()'文書ノードの第1の処理命令子ノードを選択する。 'xDoc.Root.Nodes()。OfType ()はルート要素のすべての処理命令子ノードを選択しようとしました。 –

+0

@MartinHonnen修正しました、ありがとうございます! – sirdank

関連する問題