2009-08-10 42 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