2011-06-19 11 views
0

XmlElementを別のものに挿入するためにXmlDocumentから1つを切り離したいと思います。しかし、これを行うと、名前空間を持つ子孫ノードには自動的にxmlns属性が追加されます。何らかの理由で、ターゲットXMLファイルが、すべての子ネームスペースが設定されたカスタム検証に合格しません。子孫にxmlnsの伝播を控えるオプションがありますか?子どもへのxmlns伝搬を無効にする方法

次のコードは、問題を示している - あなたの目的はただelemntをコピーすることではありません<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />

using System.Xml; 

class Program 
{ 
    static string xml = @" 
<mydoc> 
    <one xmlns:MakesMeSick=""http://tempuri.org""> 
     <two> 
      <MakesMeSick:three /> 
     </two> 
    </one> 
</mydoc> 
"; 
    static void Main(string[] args) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(xml); 
     XmlNode n = doc.SelectSingleNode("/mydoc/one/two"); 
     System.Console.WriteLine(n.InnerXml); 
    } 
} 
+0

結果はどうなるでしょうか? ''? – svick

+0

'' – Mike

+0

これは整形式のXML文書ではありません。 – svick

答えて

2

フォーム<prefix:localname>の要素を持っているなら、あなたは必見は、その要素内のどこかxmlns:prefix="whatever"かにどのようなURI prefixマップを説明祖先を持っています。関連するURIがないプレフィックスを持つのは意味がありません。

したがって、あなたの例では、出力<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />は正しいです。 xmlnsが見つからなかった場合は、有効なXML文書ではありません。

0

実行結果は、あなたの意図は、それを変換することですされています名前空間はXMLの要素名の一部でありますちょうどC#やJavaのように。したがって、XPathを使用して手作業でコーディングし、local nameに焦点を当てる必要があります。あるいは、もっと複雑なものはXSLTに頼っているかもしれません。

関連する問題