2011-03-01 14 views
0

要素内の属性の1つに接頭辞を追加しようとしていますので、解析するプログラムに与えることができますが、名前空間を追加しようとすると、プログラムは好きではありません。他のアトリビュートのプレフィックスを保持しながら、追加の属性を取り除くことが可能かどうか疑問に思っていました。xmlシリアライザでxmlns属性を削除する

ありがとうございます。私は何を得ることはこれです

public class Test 
{ 
    public Test() 
    { 
     Namespaces=new XmlSerializerNamespaces(); 
     Namespaces.Add("prefix", "prefix"); 
    } 

    [XmlNamespaceDeclarations] public XmlSerializerNamespaces Namespaces; 

    [XmlAttribute(AttributeName = @"myAttribute", Namespace = @"prefix",Form = XmlSchemaForm.Qualified)] 
    public string MyAttribute { get; set; } 
} 

:私は取得しようとしています何

<Test xmlns:prefix="prefix" prefix:myAttribute="Go" /> 

は次のとおりです。

<Test prefix:myAttribute="Go" /> 
+4

** ** prefix **プレフィックスを使用することはできません。 –

答えて

3

号marc_sが言うように、あなたは自分自身で接頭辞を使用することはできません。接頭辞の全体のポイントは、すでに定義したXML名前空間を識別することです。

通常、ドキュメントは、プレフィックスとルート要素の名前空間の関係を定義し、プレフィックスを使用してドキュメント全体でその名前空間を参照します(必須ではありません)。

あなたの文書:あなたは、これがTest要素である」、と言っている、それはによって定義された名前空間でmyAttributeという属性を持っているよう

<?xml version="1.0" encoding="UTF-8"?> 
<Test prefix:myAttribute="Go" /> 

...、整形式XMLではありません接頭語prefix "ですが、その名前空間はどこにも定義されていません。

これは、整形式のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<Test xmlns:prefix="prefix" prefix:myAttribute="Go" /> 

...これと同じように、それは少なくともあなたが望む形式で要素を生成して、あなたを助けるかもしれない:

<?xml version="1.0" encoding="UTF-8"?> 
<SomeRootElement xmlns:prefix="prefix"> 
    <Test prefix:myAttribute="Go" /> 
</SomeRootElement> 

実際のxmlnsの定義がprefixの場合、prefix:myAttributeは意味をなさない。

関連する問題