xslcompiledtransform.transform output에서 XML 지시문을 제외하십시오
-
20-09-2019 - |
문제
나는 사용하고있다 XsltCompiledTransform
일부 XML을 HTML 조각으로 변환하려면 (완전한 HTML 문서가 아닌 다른 곳에 생성 된 페이지에 포함 할 DIV 만 포함).
나는 다음과 같이 변형을하고있다 :
StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();
XmlWriter transformedData = XmlWriter.Create(output);
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("stylesheet.xslt");
transform.Transform(rawData, transformedData);
Response.Write(output.ToString());
내 문제는 변환의 결과가 항상이 XML 지시문으로 시작한다는 것입니다.
<?xml version="1.0" encoding="utf-16"?>
변환 된 데이터에서 이것이 나타나는 것을 어떻게 방지합니까?
편집하다:
XSLT에 XML 선언을 출력하고 싶지 않다고 말하고 있습니다.
<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>
그러나 이것은 내 출력에 나타나는 지침에 영향을 미치지 않는 것 같습니다.
흥미롭게도 내 XML 데이터 소스와 XSLT 변환은 모두 자신을 UTF-8
~ 아니다 UTF-16
.
업데이트:출력 메커니즘으로 문자열 (빌더)을 사용하고 있기 때문에 UTF-16이 나타나는 것 같습니다. 코드를 변경할 때 a MemoryStream
대신 a StringBuilder
, 내 UTF-8 인코딩이 보존됩니다. 나는 이것이 내부 작업과 관련이 있다고 생각합니다. string
유형 및 인코딩을 다루는 방법.
해결책
당신은 an을 사용해야합니다 XmlWriterSettings
물체. XML 선언을 생략하기 위해 속성을 설정하고이를 귀하의 생성자에게 전달하십시오. XmlWriter
.
StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();
XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;
using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("stylesheet.xslt");
transform.Transform(data, transformedData);
Response.Write(output.ToString());
}
다른 팁
가장 쉬운 방법은이 노드를 XSLT에 추가하는 것입니다.
<xsl:output
method="html"
omit-xml-declaration="yes"/>
제휴하지 않습니다 StackOverflow