如何在XML中反序列化XML?

时间:2011-12-10 09:58:43

标签: c# xml xml-serialization xml-deserialization

我有这个XML:

<Record>
    <ID>123</ID>
    <Question>Question goes here...</Question>
    <Answer>Answer goes here...</Answer>
    <ExtentedAnswer>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;ExtendedResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" DataType="12" xmlns="http://schemas.example.com/"&gt;&lt;ComplexText&gt;&lt;CityStateZip&gt;&lt;City&gt;Clifton&lt;/City&gt;&lt;State&gt;VA&lt;/State&gt;&lt;Zip&gt;20124&lt;/Zip&gt;&lt;Country&gt;US&lt;/Country&gt;&lt;/CityStateZip&gt;&lt;/ComplexText&gt;&lt;/ExtendedResponse&gt;</ExtentedAnswer>
</Record>

反序列化工作正常,但我将ExtentedAnswer作为字符串。是否可以一次性在ExtentedAnswer中反序列化XML。我知道我可以单独反序列化ExtentedAnswer。

4 个答案:

答案 0 :(得分:3)

我们在工作场所解决了这个问题。在我们的具体情况下,问题是用XSLT转换文本,这是一个彻头彻尾的痛苦,但确实是可能的。在代码中,它不那么复杂,正如其他海报所建议的那样,只需替换<>的转义码,并用普通的解析器解析它。

但是,您似乎需要一步到位的解决方案。我非常怀疑标准XML Serializer能够做到这一点,因为它不知道哪些元素包含转义的xml内容。转义文本专门用于阻止xml解析器检测它,因此手动解决方案可能是您唯一的选择。您的班级应该实施IXmlSerializable并自行执行文字转换。

最后,我强烈建议您首先控制正在创建此数据的流程存储转义的xml并找到其他解决方案。这是一种令人讨厌的工作,我无法想到任何真正必要的情况。

答案 1 :(得分:1)

您应该能够将&amp;lt;替换为<字符,将&amp;gt;替换为>字符。然后,这将为您提供一个可以与XML阅读器一起使用的字符串。

答案 2 :(得分:1)

是的,您可以这样做但 xml 应该存储 ExtentedAnswer ,如下所示: -

  <ExtentedAnswer>
    <![CDATA[
    <?xml version="1.0" encoding="utf-16"?>
    <ExtendedResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" DataType="12" xmlns="http://schemas.example.com/">
      <ComplexText>
        <CityStateZip>
          <City>Clifton</City>
          <State>VA</State>
          <Zip>20124</Zip>
          <Country>US</Country>
        </CityStateZip>
      </ComplexText>
    </ExtendedResponse>
    ]]>
  </ExtentedAnswer>

答案 3 :(得分:0)

如果你能成功的话,这是可能的。如果您只是在一个地方执行此操作,那么我会单独执行此操作,但如果您需要在许多地方执行此操作,那么您可以编写一个可以为您执行此操作的类,然后在您需要的任何地方使用它。 / p>