2017-12-07 2 views
0

ネストされた要素の既定の名前空間を取得しようとしています。私のXMLファイルの一部は次のとおりです。(LINQ to XML)でネストされたXML要素の既定のネームスペースを取得する

from node in xDoc.Elements(namespaceNode+ "Node") 
    select new DataObject 
    { 
     Xmlns = node.Element(namespaceNode+ "Node1").Element(namespaceElement+ "Node2").GetDefaultNamespace(), 
     Value = (string)node.Element(namespaceNode+ "Node1").Element(namespaceElement+ "Node2") 
    } 

値:

<Node xmlns="http://namespace-root/"> 
<Node1> 
    <Node2 xmlns="http://namespace-element">Value</Node2> 
</Node1> 
</Node> 

(名前空間 'namespaceNode' と 'namespaceElementは' XNamespaceオブジェクト私のクエリのコードの一部をされていますプロパティは要素の値を取得しますが、このノードの名前空間をXmlnsプロパティに読み込むにはどうすればよいですか?

答えて

0

これは私が通常それを行う方法

  XDocument doc = XDocument.Load(FILENAME); 
      XElement node = doc.Root; 
      XNamespace xNs = node.GetDefaultNamespace(); 

      XElement node2 = doc.Descendants().Where(x => x.Name.LocalName == "Node2").FirstOrDefault(); 
      XNamespace x2Ns = node2.GetDefaultNamespace(); 
+0

である私はそれを試してみました(XNamespace x2Ns = node2.GetDefaultNamespace())が、私は、フィールド "NamespaceName" 空と名前空間を得ました。 node2.Name.Namespaceを実行すると、Xnamespace要素にNamespaceNameという値が設定されています。理由は何ですか? –

+0

名前空間がルートノードにあると仮定した最初のノード。私は確かではなく、ルートからネームスペースを取得する例と、ルートではないノードからネームスペースを取得する別の例を挙げたかっただけです。 – jdweng

+0

はい、最初の名前空間はルートノードにあります。私は、なぜ.Name.Namespaceが、この要素の.GetDefaultNamespace()とは異なる何かを返すのは不思議です。ご協力いただきありがとうございます。 –

関連する問題