문제

나는 사용하고있다 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"/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top