문자열뿐만 아니라 요소 내용을 복사하는 방법은 무엇입니까?
-
28-10-2019 - |
문제
내 XML에는 그 안에 몇 가지 스타일이 있습니다.XslCompiledTransform Transform의 출력은 이러한 스타일 태그가 없는 HTML로 생성됩니다.XslCompiledTransform에 이를 유지하도록 지시하는 방법이 있습니까?아니면 XslCompiledTransform이 이를 기본적으로 유지해야 합니까?
여기 내 XML이 있습니다
> <codeSnippetFull>
> <span class="kwrd">event</span>
> OnCreate {
> <span class="kwrd">if</span>
> (Count == 0)
> AddE(D); <span class="rem">// comment </span>
> }
> </codeSnippetFull>
내 xslt는 전체 요소를 꺼냅니다.
<xsl:value-of select="THelpDocument/HelpBody/example/codeSnippetFull"/>
여기 내 C#이 있습니다. 적용된 기본값 외에는 아무것도 없습니다.
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(args[0]);
......
xslt.Transform(xmlFileName, Path.Combine(htmlOutputPath, Path.GetFileNameWithoutExtension(xmlFileName) + ".html"));
xslt에서 스타일을 지정하지 않는 이유는 블록에 임의의 텍스트와 혼합된 스타일이 적용될 수 있기 때문입니다.단락의 특정 단어에 스타일을 지정하는 것입니다.
해결책
XSLT 코드
<xsl:value-of select="THelpDocument/HelpBody/example/codeSnippetFull"/>
실제로 (마크업) 내용을 복사하지 않습니다. <codeSnippetFull>
요소. <xsl:value-of>
생성하는 데 사용됩니다 텍스트 노드.Value-of는 선택한 노드를 문자열로 변환합니다.요소의 문자열 값은 선택한 요소의 하위 항목인 텍스트 노드를 연결한 것입니다.노드 세트의 문자열 값(예:선택한 여러 요소)는 집합에 있는 첫 번째 노드의 문자열 값입니다.
XSLT의 요소를 복사하려면 다음을 사용할 수 있습니다.
<xs:copy>
선택한 노드를 복사하지만 속성이나 하위 노드는 복사하지 않습니다.<xs:copy-of>
선택한 전체 XML 조각(=또한 모든 하위 항목 및 속성)을 복사합니다.- ID 템플릿, 즉재귀 템플릿
<xs:copy>
제휴하지 않습니다 StackOverflow