1

次の 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 ファイルで設計されています。または、そのファイルのフィールドSplitterPositionを C# ツールで直接読み取るにはどうすればよいですか? ありがとう

4

1 に答える 1

2

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 の提案に基づいNamespaceManagerて、次の XPath を使用してを排除できます。

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);
于 2013-04-03T16:01:09.637 に答える