XML에서 간단한 일반 텍스트 출력을 생성하려면 XSL을 사용해야했습니다. 온라인에서 우수하고 간결한 예제를 찾지 못했기 때문에 여기서 내 솔루션을 게시하기로 결정했습니다. 더 나은 예를 참조하여 모든 링크는 물론 평가 될 것입니다 : 여기에 나를 도와xsl을 사용하여 일반 텍스트 출력
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="script/command" xml:space="preserve">at -f <xsl:value-of select="username"/> <xsl:value-of select="startTime/@hours"/>:<xsl:value-of select="startTime/@minutes"/> <xsl:value-of select="startDate"/><xsl:text>
</xsl:text></xsl:for-each>
</xsl:template>
</xsl:stylesheet>
몇 가지 중요한 사항 :
이- XSL의 사용 : 출력은 표준 선언을 생략를 시작 부분에 출력 문서
- xsl : for-each 태그 내에 쓴 공백을 보존하기 위해 xml : space = "preserve"속성을 사용합니다. 이것은 또한 한 줄에 (줄 바꿈 제외) 해당 태그를 포함한 for-each 태그 내의 모든 코드를 작성해야했습니다.
- 줄 바꿈을 삽입하는 데 사용 - 여기서 다시 들여 쓰기 표준 xml을 생략해야했습니다.
생성이 XSLT 요망 출력이었다
7시 58분 2010년 4월 28일
ggroup70 15 -f에서 -f ggroup67에서 -f alluser 23시 58분 2010년 4월 17일
에서 : -f alluser 3시 58분 22.9에서 -f ggroup60 23시 58분 2010년 9월 21일
에서 -f ggroup61 7시 58분 2010년 9월 22일
에서 -f alluser 23시 58분 2010년 4월 18일
58 2010년 4월 18일
.2010
내가 말했듯이, 이것을 더 우아하게하는 방법에 대한 제안은 인정 될 것이다.
FOLLOW-UP 2011-05-08 : 당신은 템플릿 script/command
에 일치하고을 제거하기 위해 정의 할 수 있습니다
<script xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="script.xsd">
<command>
<username>alluser</username>
<startTime minutes="58" hours="23"/>
<startDate>17.4.2010</startDate>
</command>
</script>
'concat (at -f ', username,' ', startTime/@ hours,' ', ...)'를 사용하여' '요소의 수를 절약 할 수 있습니다. 게다가 소스 코드를 래핑 할 수 있습니다. 태그 내부에서 그렇게하면 출력에 영향을 미치지 않습니다. –
좋은 질문입니다, +1. 완전하고 매우 짧고 정말로 일반적인 솔루션에 대한 내 대답을보십시오. –
@Christopher Creutzig : concat()에 대한 훌륭한 제안에 감사드립니다. "소스 코드 랩"이란 무엇입니까? – Chris