2017-06-01 13 views
0
<ftc:XX version="1.1" 
    xmlns:ftc="urn:v1" 
    xmlns="urn:v1">  
    <ftc:YY>  
    <SIN>000000</SIN>  
    <Country>CA</Country>  
    </ftc:YY> 
</ftc:XX> 

これは私が作成する必要があるものです。しかし、これを作成すると、SINとCountryタグに空の名前空間が表示されます。私はそれを削除する必要があります。誰も私を導くことができますか?linq to xml重複する名前空間は空の属性を与えます

これは私が使用しているコード、これと

XNamespace ftc = "urn:v1"; 
XElement XX = new XElement(ftc + "XX", 
    new XAttribute(XNamespace.Xmlns + "ftc", ftc.NamespaceName), 
    new XAttribute("xmlns", ftc.NamespaceName), 
    new XAttribute("version","1.1"), 

    new XElement(ftc + "YY",      
    XElement("SIN", "000000"), 
    new XElement("Country", "CA") 
) 
) 

、私は何を取得すると、このようなものですです。

<ftc:XX version="1.1" 
    xmlns:ftc="urn:v1" 
    xmlns="urn:v1">  
    <ftc:YY>  
    <SIN xmlns="">000000</SIN>  
    <Country xmlns="">CA</Country>  
    </ftc:YY> 
</ftc:XX> 

しかし、私はこの部分なしで必要になります。

のxmlns = ""

答えて

0

SINCountryurn:v1名前空間に属します。文書にはデフォルトの名前空間urn:v1があるため、明示的な名前空間接頭辞を持たないすべての要素はその名前空間に属します。

これらの要素を作成すると、それらは空の名前空間にあり、余分な名前空間宣言を生成する必要がありました。

XNamespace ftc = "urn:v1"; 
var doc = new XDocument(
    new XElement(ftc + "XX", 
     new XAttribute("version", "1.1"), 
     new XAttribute(XNamespace.Xmlns + "ftc", ftc), 
     new XAttribute("xmlns", ftc), 
     new XElement(ftc + "YY", 
      new XElement(ftc + "SIN", "000000"), 
      new XElement(ftc + "Country", "CA") 
     ) 
    ) 
); 
<XX version="1.1" xmlns:ftc="urn:v1" xmlns="urn:v1"> 
    <YY> 
    <SIN>000000</SIN> 
    <Country>CA</Country> 
    </YY> 
</XX> 

あなたの明示的な名前空間ftcと、デフォルトの名前空間が同じであるので、あなたが期待するように、接頭辞のいずれも生成されませんので注意してください。これは、私が知る限り要素レベルでは設定できません。

+0

ありがとうございます@ジェフ、はい私はあなたに同意しました。しかし、場合によっては、私はこのように作成する必要があります.. –

関連する問題