Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML读取标记之间的字符串值_C#_Xml - Fatal编程技术网

C# XML读取标记之间的字符串值

C# XML读取标记之间的字符串值,c#,xml,C#,Xml,假设我有以下XML: <SplitterLayoutDataSet xmlns="http://tempuri.org/SplitterLayoutDataSet.xsd"> <SplitterLayout> <SplitterName>mainSplitContainerControl</SplitterName> <SplitterPosition>0.22

假设我有以下XML:

    <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的节点。