2011-12-10 7 views
1

나는이 XML이 :XML 내부에서 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를 얻을. 한 번에 ExtendedAnswer에서 XML을 비 직렬화 할 수 있습니까? ExtendedAnswer를 Deserialize 할 수 있다는 것을 알고 있습니다.

답변

3

우리는이 문제를 우리 직장에서 다루었습니다. 우리의 구체적인 경우, 문제는 XSLT로 텍스트를 변환하는 것이 었습니다. XSLT는 완전히 고통 이었지만 가능했습니다. 코드에서 다른 포스터에서 제안한 것처럼 덜 복잡합니다. <>의 이스케이프 코드를 대체하고 일반 파서로 구문 분석합니다.

그러나 한 단계 해결 방법이 필요합니다. 나는 엘리먼트가 이스케이프 된 XML 컨텐트를 포함하고 있는지에 대한 지식이 없기 때문에 표준 XML 시리얼 라이저가이를 수행 할 수 있을지 의심 스럽다. 이스케이프 처리 된 텍스트는 특히 XML 파서가이를 감지하지 못하도록하기 때문에 수동 방식의 해결책이 유일한 옵션 일 수 있습니다. 수업은 IXmlSerializable을 구현하고 텍스트 변환 자체를 수행해야합니다.

마지막으로,이 데이터를 생성하는 프로세스에 대한 제어 권한이있는 경우 은 이스케이프 처리 된 xml을 저장하고 다른 솔루션을 찾지 않는 것이 좋습니다. 함께 일하는 것은 귀찮은 일이며 진정으로 필요한 상황을 생각할 수 없습니다.

+0

감사합니다. 슬프게도 저는 XML을 생성하는 책임이 없습니다. 글쎄, 이제는 제대로 된 것처럼 보이기 위해 별도로 처리하고 나중에 IXmlSerializable 구현을 진행할 것입니다. –

1

&amp;lt;< 문자로 바꾸고 &amp;gt;> 문자로 바꿀 수 있어야합니다. 그러면 XML 판독기에서 사용할 수있는 문자열이 제공됩니다.

0

가능하면 가능합니다. 한 곳에서이 작업을 수행하면 별도로 처리 할 수 ​​있습니다. 그러나 여러 곳에서이 작업을 수행해야하는 경우에는 필요에 따라이 작업을 수행하는 클래스를 작성할 수 있습니다.

+0

글쎄, 나는 그것이 개별적으로 수행 할 수 있습니다 알고 있습니다. 한 번에 deserialize를 수행 할 수 있는지, XML 내부의 부분을 루트로 집계 할 수 있는지 궁금합니다. –

+0

네, 이해합니다. 만약 당신이 xml을 읽을 필요가있을 때마다 여러 단계를 거치지 않고 한 곳에서 할 수있는 단계를 캡슐화하고 싶다면 한 단계에서 그것을 할 수있는 방법을 찾지 못한다면 데이터. –

1

예, 당신은 할 수 있지만 다음과 같이 XMLExtentedAnswer을 저장해야합니다 : -

<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> 
+0

예. 효과가있을 것입니다. 감사. 그러나 나는 XML을 생성하는 책임이 없다. –

관련 문제