如何在XML中反序列化XML

本文关键字:XML 反序列化 | 更新日期: 2023-09-27 18:17:38

我有这个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。

如何在XML中反序列化XML

我们已经在工作场所解决了这个问题。在我们的具体案例中,问题是用XSLT转换文本,这是一个非常痛苦的过程,但确实是可能的。在代码中,它不那么复杂,正如其他海报所建议的那样,只需将转义码替换为<>,并用普通解析器解析即可。

然而,你似乎想要一个单一步骤的解决方案。我非常怀疑标准XML Serializer是否能够做到这一点,因为它不知道哪些元素包含转义的XML内容。转义的文本是专门用来阻止xml解析器检测它的,所以手工制作的解决方案可能是您唯一的选择。你的类应该实现IXmlSerializable并自己执行文本转换。

最后,我强烈建议,如果您对创建该数据的进程有任何控制权,那么就不要存储已转义的xml并寻找其他解决方案。这是一个讨厌的工作,我想不出任何情况下,这是真正必要的。

是的,您可以这样做,但是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>

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

如果你让它成为可能,它是可能的。如果你只在一个地方做这个,那么我会单独做,但如果你需要在很多地方做这个,那么你可以写一个类来为你做这个,然后在你需要的地方使用它。