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

本文关键字:读取 字符串 XML 之间 | 更新日期: 2023-09-27 18:07:11

假设我有以下XML:

    <SplitterLayoutDataSet xmlns="http://tempuri.org/SplitterLayoutDataSet.xsd"> 
        <SplitterLayout> 
            <SplitterName>mainSplitContainerControl</SplitterName>
            <SplitterPosition>0.2213375796178344</SplitterPosition>
        </SplitterLayout> 
    </SplitterLayoutDataSet>

我需要一种方法如何获得SplitterPosition值,在这种情况下:0.2213375796178344。在不使用Linq-to-XML或让这些方法结合使用的情况下,是否有办法实现这个解决方案?这个XML是在SplitterLayoutDataset中设计的。xsd文件。或者如何直接使用c#工具读取该文件的SplitterPosition字段?由于

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

下面是使用XmlDocumentSelectSingleNode的解决方案:

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

或者使用XDocumentXPathSelectElement:

var xdoc = XDocument.Parse(xml);
var xPath = "//*[local-name()='SplitterPosition']";
Console.WriteLine(xdoc.XPathSelectElement(xPath).Value);