2009-08-10 64 views
3

我正在使用Linq To XML來創建發送給第三方的XML。當我想用XML發送的部分信息是動態的時,我很難理解如何使用Linq創建XML。使用Linq創建XML到XML和數組

XML的動態部分保存爲字符串[,]數組。這個多維數組擁有2個值。

我可以使用stringbuilder'建立'動態XML,並將數組中的值存儲到字符串變量中,但是當我嘗試將此變量包含到Linq中時,該變量是HTMLEncoded,而不是作爲正確的XML包含在內。

我該如何去添加我的動態構建的字符串到Linq構建的XML中?

例如:

//string below contains values passed into my class 

串[,] AccessoriesSelected;

//I loop through the above array and build up my 'Tag' and store in string called AccessoriesXML 


//simple linq to xml example with my AccessoriesXML value passed into it 
XDocument RequestDoc = new XDocument(
new XElement("MainTag", 
new XAttribute("Innervalue", "2") 
), 
AccessoriesXML); 

「標籤」是一個額外的選擇,它可能會出現在我的XML多次,也可能不是 - 它是依賴於用戶檢查一些複選框。

現在,當我跑我的代碼,我看到這一點:

<MainTag> blah blah </MainTag> 
&lt ;Tag&gt ;&lt ;InnerTag&gt ; option1="valuefromarray0" option2="valuefromarray1" /&gt ;&lt ;Tag/&gt ; 

我想回到這個東西:

<MainTag> blah blah </MainTag> 
<Tag><InnerTag option1="valuefromarray0" option2="valuefromarray1" /></Tag> 
<Tag><InnerTag option1="valuefromarray0" option2="valuefromarray1" /></Tag> 

任何想法或建議?我可以使用XmlDocument來實現這個工作,但如果可能的話,我希望能夠與Linq一起工作。

感謝您的幫助, 豐富

回答

3

大廈XElements與(「名」,「值」)構造函數將使用該值文本作爲文字文本 - 和逃避它,如果有必要實現這一目標。

如果您想要從XML文本片段中編程式地創建XElement,您希望將其實際解釋爲XML,則應使用XElement.Load()。這會將字符串解析爲實際的XML,而不是嘗試將字符串的文本指定爲轉義字面值。

試試這個:

XDocument RequestDoc = new XDocument(
new XElement("MainTag", 
new XAttribute("Innervalue", "2") 
), 
XElement.Load(new StringReader(AccessoriesXML))); 
+0

這就是它!我不會讓自己感到難堪,說我爲了讓它工作哈哈已經搞亂了多久了!謝謝:) – 2009-08-10 18:32:31

+0

你爲什麼使用'StringReader'?簡單地做這件事是錯誤的嗎? 'XElement.Load(AccessoriesXML)' – Meysam 2012-02-03 20:51:35