下面是使用XmlDocument
和SelectSingleNode
一個解決方案:
var xml = @"
<SplitterLayoutDataSet xmlns=""http://tempuri.org/SplitterLayoutDataSet.xsd"">
<SplitterLayout>
<SplitterName>mainSplitContainerControl</SplitterName>
<SplitterPosition>0.2213375796178344</SplitterPosition>
</SplitterLayout>
</SplitterLayoutDataSet>";
//Create XmlDocument
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
//Create NamespaceManager (for XPath)
var nsMgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsMgr.AddNamespace("dn", "http://tempuri.org/SplitterLayoutDataSet.xsd");
//Get inner text of SplitterLayout/SplitterPosition
var xPath = "//dn:SplitterLayout/dn:SplitterPosition";
Console.WriteLine(xmlDoc.SelectSingleNode(xPath, nsMgr).InnerText);
或基於@ AlexeiLevenkov的建議,您可以通過使用以下XPath消除NamespaceManager
:
var xPath = "//*[local-name()='SplitterPosition']";
Console.WriteLine(xmlDoc.SelectSingleNode(xPath).InnerText);
當然,你也可以用XDocument
:
var xdoc = XDocument.Parse(xml);
XNamespace ns = @"http://tempuri.org/SplitterLayoutDataSet.xsd";
Console.WriteLine(xdoc.Descendants(ns + "SplitterPosition").First().Value);
或者使用XDocument
和XPathSelectElement
:
var xdoc = XDocument.Parse(xml);
var xPath = "//*[local-name()='SplitterPosition']";
Console.WriteLine(xdoc.XPathSelectElement(xPath).Value);
你爲什麼不喜歡的LINQ to XML? –
同意@OleksandrPshenychnyy - 這在LINQ to XML中絕對是微不足道的。 – Tim
如果你不喜歡LINQ到XML,那麼就有'XmlDocument',或者你甚至可以直接使用'XmlReader' ......但是如果你想手工字符串操作的答案,你必須證明你理解了整個XML規範,然後才能給出答案:) –