XslCompiledTransform을 사용하여 한 개체를 다른 개체로 변환하는 일부 기능을 구현하려고합니다.XslCompiledTransform 및 Serialization
개체를 XML 문자열로 serialize하고 XML 문자열을 개체에 DeSerialize하는 몇 가지 구현을 발견했습니다.
또 다른 함수는 object1에서 obejbct2까지 XslCompiledTransform을 수행합니다.
XSLT 파일을 생성하려면 Altova MapForce를 사용하고 직렬화 된 객체의 XML을로드하고 일부 속성을 매핑했습니다. 문제에 대한 지금
는 :
- 먼저 나는 XslCompiledTransform는 XSLT 버전 2.0에서 작동하지 않는 것으로 나타났습니다. XSLT 2.0에서 작동하는 새로운 함수가 있습니까? 어쩌면 일부 설정?
- 두 번째로 개체에 XML을 DeSerialize 할 때 예외가 발생합니다. "myObject 형식의 개체를 deserialize하는 동안 오류가 발생했습니다. 입력 문자열의 형식이 올바르지 않습니다." 어디에 문제가 있는지 이해할 수 없습니다. 누구나 그런 일을하는 샘플 코드가 있습니까? Google에서 발견 한 모든 것은 HTML 코드의 변형이며 객체가 아닙니다.
다음은 기능은 다음과 같습니다
private static string runXSLT(string xsltFile, string inputXML)
{
XmlDocument XmlDoc = new XmlDocument();
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform(true);
xslt.Load(xsltFile);
StringReader StrReader = new StringReader(inputXML);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
//Create an XmlTextWriter which outputs to memory stream
Stream stream = new MemoryStream();
XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
// Execute the transform and output the results to a file.
xslt.Transform(XmlReader, writer);
stream.Position = 0;
XmlDoc.Load(stream);
return XmlDoc.InnerXml;
}
public static string SerializeAnObject(object AnObject)
{
XmlDocument XmlDoc = new XmlDocument();
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(AnObject.GetType());
MemoryStream MemStream = new MemoryStream();
try
{
xmlDataContractSerializer.WriteObject(MemStream, AnObject);
MemStream.Position = 0;
XmlDoc.Load(MemStream);
return XmlDoc.InnerXml;
}
finally
{
MemStream.Close();
}
}
public static Object DeSerializeAnObject(string XmlOfAnObject, Type ObjectType)
{
StringReader StrReader = new StringReader(XmlOfAnObject);
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(ObjectType);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
try
{
Object AnObject = xmlDataContractSerializer.ReadObject(XmlReader);
return AnObject;
}
finally
{
XmlReader.Close();
StrReader.Close();
}
}
덕분에 충당,
오므리.
XSL 변환을 사용하는 목적은 다른 하드 코딩하지 하나의 객체의 매핑을하는 것입니다 –
새 클래스에 원래의 클래스를 변환하는 생성자를 사용하는 한, 그래서 매핑 속성을 변경할 수 있습니다 프로젝트를 컴파일하지 않아도됩니다. 사실 웹 서비스간에 데이터를 매핑하기 위해 이것을 구축하고 있습니다. WS 1에서 데이터 A를 받고 WS 2에서 데이터 B를 얻습니다. 이제 WS 3에 제출할 새 클래스를 만들어야합니다. 대답 클래스는 객체 A + B로 작성되었습니다. WS 1이 앞으로 반환 될 경우 다른 개체 A (A.name이 A.firstName으로 변경됨) XSLT 파일의 매핑을 변경하고 프로젝트를 다시 컴파일하지 않고 수행 할 수 있습니다. 빠른 답장을 보내 주셔서 감사합니다. –