문제

XSLT-Newbie 문제 : XML-File에서 텍스트 값을 대체해야합니다. 다른 모든 노드는 변경되지 않아야합니다. 내 입력 파일 (in.xml)은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <level1 attr1="val1">
        <level2>in</level2>
    </level1>
</root>

다음은 내 XSLT-Transformation (subs.xsl)입니다.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="//node()">
        <xsl:copy>
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/root/level1/level2/text()">out</xsl:template>
</xsl:stylesheet>

다음 개미 스크립트 (build.xml)로 실행합니다.

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="test" basedir=".">
    <target name="test">
        <xslt style="subst.xsl" in="in.xml" out="out.xml" />
    </target>
</project>

그리고 여기에 내가 얻는 것이 있습니다 (out.xml) :

<?xml version="1.0" encoding="UTF-8"?><root>
    <level1>
        <level2>out</level2>
    </level1>
</root>

"level1"의 "attr1"속성이 누락되었습니다.

누군가가 있으면 매우 감사 할 것입니다

  • 말해 주세요 SUBS.XSL에 무엇이 잘못 되었습니까?

또는

  • XSLT- 프로세서를 강제하는 방법을 알려주세요 일치하지 않은 노드 만 복사하십시오 파일을 출력하고 손으로 수행합니다 (이 경우 오류가 발생하기 쉬운).
도움이 되었습니까?

해결책

귀하의 신원 변환에는 속성이 누락되었습니다 (분명히). 대신 사용하십시오 :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

그런 다음 마지막 템플릿을 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top