linq to xml duplicate namespace给出了空属性

时间:2017-06-01 09:06:25

标签: c# xml linq-to-xml

<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标签中显示空命名空间。我需要删除它。谁能指导我?

这是我使用的代码,

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 =&#34;&#34;

1 个答案:

答案 0 :(得分:0)

SINCountry属于urn: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和默认名称空间相同,因此不会按预期生成任何前缀。据我所知,这在每个元素级别上是不可配置的。