2017-08-19 15 views
0

Newbi on XML。 すべてのDisplayNameからText属性を読み取ろうとしています。私の問題はRule要素の近くにあると考えてください。それは私の問題を解決する方法ですか?前もって感謝します! //マグナスC# - サブXmlnsを使用してXMLから属性を読み取る

<?xml version="1.0" encoding="utf-16"?> 
<AppMgmtDigest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDigest"> 
    <DeploymentType > 
    <Requirements> 
     <Rule xmlns="http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules"> 
     <Annotation> 
      <DisplayName Text="Primary device Equals True"/> 
     </Annotation> 
     </Rule> 
     <Rule xmlns="http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules"> 
     <Annotation> 
      <DisplayName Text="Operating system One of {All Windows 10 (64-bit)}"/> 
     </Annotation> 
     </Rule> 
    </Requirements> 
    </DeploymentType> 
</AppMgmtDigest> 





XmlDocument xml = new XmlDocument(); 
xml.LoadXml(SDMPackageXML); 

XmlNamespaceManager ns = new XmlNamespaceManager(xml.NameTable); 
ns.AddNamespace("msbld","http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDigest"); 
ns.AddNamespace("msbldr","http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/06/14/Rules"); 

XmlNodeList nodlist = xml.SelectNode("/msbld:AppMgmtDigest/msbld:DeploymentType/msbld:Requirements/msbldr:Rule", ns/@Text); 
+0

は、合理的な出発点のように見えます。このコードでどのような問題があるのか​​を明確にすることは役に立ちます。 –

+0

こんにちはアレクセイ!問題は、nodlist Countが0であることです。Countが2であると期待しています。 <ルールのxmlns = "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules">

答えて

0

てみたXML LINQ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(FILENAME); 
      reader.ReadLine(); //skip the identification line with utf-16 
      XElement doc = XElement.Load(reader); 

      List<string> text = doc.Descendants().Where(x => x.Name.LocalName == "DisplayName").Select(x => (string)x.Attribute("Text")).ToList(); 

     } 

    } 
} 
0

はまず、名前空間のタイプミスを持っている:C#でのXMLでSystemsSystem

第2に、コードがコンパイルされません。投稿する前に、明白なエラーを修正してください。

これをしてくださいしてみてください。

// Correct typo 
ns.AddNamespace("msbldr", 
    "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules"); 

XmlNodeList nodelst = xml.SelectNodes(
    "/msbld:AppMgmtDigest/msbld:DeploymentType/msbld:Requirements/msbldr:Rule//@Text", ns); 

また、あなたのXPathが目的の属性への正確なパスを指定することがあります。

"/msbld:AppMgmtDigest/msbld:DeploymentType/msbld:Requirements/msbldr:Rule/msbldr:Annotation/msbldr:DisplayName/@Text" 
関連する問題