2012-09-26 168 views
0

我已經開發出了下面的代碼生成xElement(C#語言)來的XElement:添加屬性使用命名空間

new XElement("Transmission", 
    new XAttribute(XNamespace.Xmlns.GetName("xmlns").LocalName, "http://www.irs.gov/efile"), 
    new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
    new XAttribute(xsi + "schemaLocation", schemaLocation), 
      ........ 

三個命名空間聲明如下:

private static XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); 
    private static XNamespace schemaLocation = XNamespace.Get("http://www.irs.gov/efile ./ExtendedCommon/Transmission.xsd"); 
    private static XNamespace xmlnsLocation = XNamespace.Get("http://www.irs.gov/efile"); 

但是,當我生成xml出了這個,我得到以下錯誤:

The prefix '' cannot be redefined from '' to 'http://www.irs.gov/efile' within the same start element tag. 

可能有些有幫助嗎?

+0

考慮張貼您要創建的XML,那麼我們就可以使用代碼幫助。我想你想'XNamespace df =「http://www.irs.gov/efile」; XElement t = new XElement(df +「Transmission」,...)'在特定名稱空間中創建元素,但我不確定。 –

+0

另請注意''XNamespace xsi = XNamespace.Get(「http://www.w3.org/2001/XMLSchema-instance」);'可以縮寫爲'XNamespace xsi =「http://www.w3.org/2001/XMLSchema的實例「;'。 –

回答

0

我想你想

XNamespace df = "http://www.irs.gov/efile"; 
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
string schemaLocation = "ExtendedCommon/Transmission.xsd"; 

XElement t = new XElement(df + "Transmission", 
    new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
    new XAttribute(xsi + "schemaLocation", string.Format("{0} {1}", df, schemaLocation))); 

這將生成XML

<Transmission xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.irs.gov/efile ExtendedCommon/Transmission.xsd" xmlns="http://www.irs.gov/efile" /> 
+0

完美的解決方案。它拯救了我的一天。欣賞很多。 – user1700817

+0

我之前幾乎沒有講過。除了命名空間xmlns也被擴展到它的所有子elemetns之外,它的性能很好,我不想要。 – user1700817

+0

我通過在每個XElement前添加df來解決此問題。像新的XElement(df +「ddddd」,value)。當我這樣做時,問題就解決了。 – user1700817