如何在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><?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>
</Record>
反序列化工作得很好,但我得到ExtentedAnswer作为字符串。是否有可能在ExtentedAnswer中一次性反序列化XML ?我知道我可以单独反序列化ExtentedAnswer。
我们已经在工作场所解决了这个问题。在我们的具体案例中,问题是用XSLT转换文本,这是一个非常痛苦的过程,但确实是可能的。在代码中,它不那么复杂,正如其他海报所建议的那样,只需将转义码替换为<
和>
,并用普通解析器解析即可。
然而,你似乎想要一个单一步骤的解决方案。我非常怀疑标准XML Serializer是否能够做到这一点,因为它不知道哪些元素包含转义的XML内容。转义的文本是专门用来阻止xml解析器检测它的,所以手工制作的解决方案可能是您唯一的选择。你的类应该实现IXmlSerializable
并自己执行文本转换。
是的,您可以这样做,但是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>
您应该能够将&lt;
替换为<
字符,将&gt;
替换为>
字符。这将为您提供一个可用于XML阅读器的字符串。
如果你让它成为可能,它是可能的。如果你只在一个地方做这个,那么我会单独做,但如果你需要在很多地方做这个,那么你可以写一个类来为你做这个,然后在你需要的地方使用它。