2012-04-13 10 views
1

を返し、私はXmlElement コンバートのXmlElementはありません結果

XElementから
public staic XElement ToXElement(this XmlNode node) { 
    XElement element = null; 
    if (null != node) { 
     element = XElement.Parse(node.OuterXml); 
    } 
    return element; 
} 

を変換するには、次のコードを使用しています、私はElements()またはElements("ElementName")を呼び出すときしかし、私は結果を得ることはありません。
しかし私はNodes()を呼び出して結果を得ています。

要素が呼び出されることで要素が表示されないのはなぜですか?2つの方法の違いは何ですか?

ここで私は解析しているxmlのスニペットです。

<Feature xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <ElementManifests> 
     <ElementFile Location="Path/file.xml"/> 
    </ElementManifests> 
</Feature> 
+0

あなたはあなたの "のElementName" にはタイプミスがありませんか? – MarcinJuraszek

+1

"ElementName"が正しい場合、要素に名前空間がありますか?もしそうなら、要素を呼び出すときに表示されると思います( – jbl

+0

)XMLノード(テキストとして)のサンプルを追加します。 –

答えて

2

名前空間を正しく使用していない可能性があります。どちらの方法でも私のために正常に動作:

あなたが Elements()(すべての直接の子を取得)と Element()の違いを知っていないことを考えると
XElement root = XElement.Load("test.xml"); //or result of ToXElement 
foreach(var item in root.Elements()) 
{ 
    Console.WriteLine(item.Name); 
} 

XNamespace ns = "http://schemas.microsoft.com/sharepoint/"; 
var manifestsNode = root.Element(ns + "ElementManifests"); 

(ある特定の直接の子要素を取得)あなたはLINQので開始する必要がありますto XMLチュートリアル。

+0

私はSystem.Xmlに精通しています。 Linq、私は 'Load'を使用していません。' Parse'を使用していますが、違いが生じるかもしれないと思うのですが、 'Elements()'も結果を返す必要があるのでネームスペースは問題ではありません。 –

+0

Yes - '要素()は結果を生成しなければなりません(サンプルXMLを使用して私のために行います)。 'Load'と' Parse'の結果の間に実際の違いはありません。 XML文字列。完全なXMLを 'ToXElement'メソッドに渡していることを確認できますか? – BrokenGlass

+0

これは、私の問題が実際にどこかにあることを意味するはずです。 –

0

テストこのコード:

var Status = xn["Feature"]; 
foreach (XmlElement element in Status) { 
    XElement withoutXmlnsElement =RemoveAllNamespaces(XElement.Parse(element.OuterXml)); 
} 

public static XElement RemoveAllNamespaces(XElement e) { 
    return new XElement(e.Name.LocalName, 
    (from n in e.Nodes() 
    select ((n is XElement) ? RemoveAllNamespaces(n as XElement) : n)), 
    (e.HasAttributes) ? (from a in e.Attributes() 
    where (!a.IsNamespaceDeclaration) select new  
    XAttribute(a.Name.LocalName,a.Value)) : null); 
} 
関連する問題