使用XDocument检索处理指令

时间:2017-03-14 15:43:24

标签: c# xml linq-to-xml

我有一个包含处理指令的XML文档。我知道,使用XmlDocument类,您可以使用

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

但我想使用XDocument。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这是我使用XDocument类访问XML文件节点的方法 但是,您必须更加具体地了解您想要用它做什么。

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();

更新:

您可能已经注意到XDocument中没有 SelectSingleNode ,实际上,要检索您想要的节点,您必须从相应的可相关集合中获取它,或者或者来自预定义的 FirstNode NextNode PreviousNode LastNode ,但您无法对这些过滤器应用任何过滤器。因此,检索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);

如果您希望检索多个 ProcessingInstructions 并且还需要过滤这些节点名称,则目标属性< / p>

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

最后提醒一下,处理指令的值存储在数据属性中。

string pI_value = filtered_pIs.First().Data

答案 1 :(得分:0)

这是一种方式:

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