我有一些代码将XNode返回给我,如下所示:
<File>
<Component>Main</Component>
<Path>C:\Main\</Path>
<FileName>main.txt</FileName>
</File>
我需要一些能够提取Path值的C#代码(C:\ Main)。我知道,如果我使用XML节点,我可以这样做:
String filePath = xmlNode["Path"].InnerText;
有人知道XNode的等价物是什么吗?非常感谢任何帮助!
答案 0 :(得分:45)
让返回XNode
而不是XElement
?使用XElement
比使用XNode
:
string filePath = fileElement.Element("Path").Value;
这将找到第一个 Path
元素,如果没有,则会抛出NullReferenceException
。如果你很高兴得到null
,如果没有,那么可以选择:
string filePath = (string) fileElement.Element("Path");
如果您真的被XNode
困住,则必须投放到XElement
或XContainer
。
答案 1 :(得分:7)
您可以将XNode转换为XElement以访问其属性,例如:
XNode lastNode = myXElement.LastNode;
//if I want to get the 'ID' attribute
string id = (lastNode as XElement).Attribute("ID").Value;
答案 2 :(得分:0)
你可以用这个:
XElement xtr = XElement.Load("path/to/your/xml/file");
String filePath = xtr.Descendants("Path").Single().Value;
答案 3 :(得分:0)
如果导入System.Xml.XPath,可以在XNode对象上使用XPathSelectElement:
String component = xmlNode.XPathSelectElement("Component");
String path = xmlNode.XPathSelectElement("Path");
String fileName = xmlNode.XPathSelectElement("FileName");
答案 4 :(得分:0)
将XNode转换为XElement适用于单个元素以检索其值或属性。但是你无法使用myXelement.Elements(&#34; XXX&#34;)来获取嵌套元素。为此,您可以使用xmlNode.Nodes()。
这应该有效:
var nodes = xmlNode.Nodes();//Get all nodes under 'File'
var fileNameNode = nodes.Where(el => ((XElement)el).Name.LocalName == "FileName")
.FirstOrDefault();
string filePath = ((XElement)fileNameNode).Value;
答案 5 :(得分:0)
这取决于抽象的XNode
是什么具体的对象。来自XNode Class:
XNode是以下类型的抽象公共基类: XComment XContainer:可以是XDocument或XElement XDocumentType XProcessing指令 XText
因此,您需要检查是否可以将其强制转换为XDocument
或XElement
,并使用其方法,或使用LINQ to XML:
例如:
答案 6 :(得分:0)
XNode xnode
string value = (xnode as XElement).Value;
我们可以从XElement对象获取值,所以我们需要先将XNode强制转换为XElement
应该工作