代码之家  ›  专栏  ›  技术社区  ›  Richard Reddy

使用LINQ to XML和数组创建XML

  •  3
  • Richard Reddy  · 技术社区  · 17 年前

    我正在使用LINQ to XML创建发送给第三方的XML。当我想在XML中发送的部分信息是动态的时,我很难理解如何使用LINQ创建XML。

    XML的动态部分被保存为字符串[,]数组。这个多维数组包含2个值。

    我可以使用StringBuilder“构建”动态XML,并将数组中的值存储到字符串变量中,但当我尝试将此变量包含到Linq中时,该变量是htmlencoded,而不是包含为适当的XML。

    如何将动态构建的字符串添加到Linq构建的XML中?

    例如:

    //string below contains values passed into my class
    

    已选择字符串[,]访问器;

    //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);
    

    “tag”是一个可选的额外项,它可能会多次出现在我的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来实现这个功能。

    谢谢你的帮助, 丰富的

    1 回复  |  直到 17 年前
        1
  •  3
  •   womp    17 年前

    使用(“name”,“value”)构造函数构建Xelements时,将使用值文本作为文本文本,并在必要时对其进行转义。

    如果您想从一小段XML文本中以编程方式创建Xelement,而实际上希望将其解释为XML,则应该使用 XElement.Load() . 这将把字符串解析为实际的XML,而不是试图将字符串的文本指定为转义的文本值。

    试试这个:

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