C# XML读取标记之间的字符串值
假设我有以下XML:C# XML读取标记之间的字符串值,c#,xml,C#,Xml,假设我有以下XML: <SplitterLayoutDataSet xmlns="http://tempuri.org/SplitterLayoutDataSet.xsd"> <SplitterLayout> <SplitterName>mainSplitContainerControl</SplitterName> <SplitterPosition>0.22
<SplitterLayoutDataSet xmlns="http://tempuri.org/SplitterLayoutDataSet.xsd">
<SplitterLayout>
<SplitterName>mainSplitContainerControl</SplitterName>
<SplitterPosition>0.2213375796178344</SplitterPosition>
</SplitterLayout>
</SplitterLayoutDataSet>
主拆分容器控制
0.2213375796178344
我需要一种方法来获取SplitterPosition值,在本例中为:0.2213375796178344。如果不使用Linq到XML,或者不让这些方法结合使用,是否可以获得此解决方案的收据?此XML是在SplitterLayoutDataset.xsd文件中设计的。或者如何使用C#工具直接读取该文件的字段拆分位置?
谢谢这里有一个使用
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);
当然,您也可以使用XDocument
:
var xdoc = XDocument.Parse(xml);
XNamespace ns = @"http://tempuri.org/SplitterLayoutDataSet.xsd";
Console.WriteLine(xdoc.Descendants(ns + "SplitterPosition").First().Value);
var xdoc = XDocument.Parse(xml);
var xPath = "//*[local-name()='SplitterPosition']";
Console.WriteLine(xdoc.XPathSelectElement(xPath).Value);
或者使用XDocument
和XPathSelectElement
:
var xdoc = XDocument.Parse(xml);
XNamespace ns = @"http://tempuri.org/SplitterLayoutDataSet.xsd";
Console.WriteLine(xdoc.Descendants(ns + "SplitterPosition").First().Value);
var xdoc = XDocument.Parse(xml);
var xPath = "//*[local-name()='SplitterPosition']";
Console.WriteLine(xdoc.XPathSelectElement(xPath).Value);
为什么您不喜欢LINQ to XML?同意@OleksandrPshenychnyy-这在LINQ to XML中是绝对微不足道的。如果您不喜欢LINQ to XML,则存在
XmlDocument
或者您甚至可以直接使用XmlReader
。。。但是如果您想要手动字符串操作答案,您必须证明您理解整个XML规范,然后才能给出这样的答案:)我喜欢LINQ to XML,但它会破坏程序逻辑。否则,它必须是完全的rewritten@Krill-听起来好像有更大的问题。非常感谢!我要试试:)+1。。。两个版本也没有搜索同一个元素。。。XPath可以是简单的“/*[local-name()='SplitterPosition']”
(也可以添加名称空间uri检查)以匹配“xdoc.substands”调用并避免所有名称空间设置。@AlexeiLevenkov有没有一种方法可以使用XDocument
获取SplitterPosition
,而不指定XNamespace
?您可以用它在XDocument
中选择带有XPath的节点。