특정 태그가 이미있는 경우 동일한 수준에 여러 태그 추가

이제 xsl을 여러 번 변경했지만 올바른 방법을 찾지 못했습니다. 이제 내가 원하는 것은 다음과 같습니다.

이제 설명이없는 모든 누락 된 페이지를 찾으려고합니다. 누락 된 경우 해당 페이지에 대한 설명을 추가하고, 존재하는 경우 설명을 수정하고 싶습니다. pageX에서 pageXDescription까지의 문자열은 항상 동일합니다.

다음은 짧은 예제 xml입니다.

 <BOOK>
    <PAGE NAME='page1' VALUE='coolText'/>
    <PAGE NAME='Description1' VALUE='coolDescription'/>
    <PAGE NAME='page2' VALUE='moreText'/>
    <PAGE NAME='page3' VALUE='aLotMoreText'/>
    <PAGE NAME='Description3' VALUE='aLotMoreDescriptions'/>
  </BOOK>

나는 다음과 같이 그것을 시도했다.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- define output settings and header -->
    <xsl:output method="xml" indent="yes" omit-xml-declaration="no" media-type="string" encoding="ISO-8859-1" doctype-system="deftable.dtd"/>

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

    <xsl:template match="BOOK[PAGE/@NAME='page1']">
        <xsl:copy>
            <xsl:call-template name="create_missing_description_pages">
                <xsl:with-param name="page" select="'page1'"/>
                <xsl:with-param name="description" select="'Description1'"/>
                <xsl:with-param name="new_description" select="'newContent'"/>
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="BOOK[PAGE/@NAME='page2']">
        <xsl:copy>
            <xsl:call-template name="create_missing_description_pages">
                <xsl:with-param name="page" select="'page2'"/>
                <xsl:with-param name="description" select="'Description2'"/>
                <xsl:with-param name="new_description" select="'newContent'"/>
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="BOOK[PAGE/@NAME='page3']">
        <xsl:copy>
            <xsl:call-template name="create_missing_description_pages">
                <xsl:with-param name="page" select="'page3'"/>
                <xsl:with-param name="description" select="'Description3'"/>
                <xsl:with-param name="new_description" select="'newContent'"/>
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>
    <!-- Function to generate missing XML Tags -->
    <xsl:template name="create_missing_description_pages">
        <xsl:param name="page"/>
        <xsl:param name="description"/>
        <xsl:param name="new_description"/>
        <xsl:apply-templates select="@*|VARIABLE[@NAME=$page]/preceding-sibling::node()"/>
        <xsl:apply-templates select="VARIABLE[@NAME=$page]"/>
        <xsl:if test="not(VARIABLE/@NAME=$description)">
            <xsl:element name="PAGE">
                <xsl:attribute name="NAME"><xsl:value-of select="$description"/></xsl:attribute>
                <xsl:attribute name="VALUE"><xsl:value-of select="$new_description"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
        <xsl:apply-templates select="VARIABLE[@NAME=$page]/following-sibling::node()"/>
    </xsl:template>
    <xsl:template match="BOOK/PAGE">
        <xsl:copy>
            <xsl:choose>
                <xsl:when test="@NAME='Description1'">
                    <xsl:attribute name="NAME"><xsl:value-of select="@NAME"/></xsl:attribute>
                    <xsl:attribute name="VALUE">newContent</xsl:attribute>
                </xsl:when>
                <xsl:when test="@NAME='Description2'">
                    <xsl:attribute name="NAME"><xsl:value-of select="@NAME"/></xsl:attribute>
                    <xsl:attribute name="VALUE">newContent</xsl:attribute>
                </xsl:when>
                <xsl:when test="@NAME='page3Description'">
                    <xsl:attribute name="NAME"><xsl:value-of select="@NAME"/></xsl:attribute>
                    <xsl:attribute name="VALUE">newContent</xsl:attribute>
                </xsl:when>
                <!-- other child items will just be copied -->
                <xsl:otherwise>
                    <xsl:copy-of select="@*"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

모든 설명이 누락되거나 모든 설명을 사용할 수있는 경우 모든 경우에 예상되는 것입니다.

  <BOOK>
    <PAGE NAME='page1' VALUE='coolText'/>
    <PAGE NAME='Description1' VALUE='newContent'/>
    <PAGE NAME='page2' VALUE='moreText'/>
    <PAGE NAME='Description2' VALUE='newContent'/>
    <PAGE NAME='page3' VALUE='aLotMoreText'/>
    <PAGE NAME='Description3' VALUE='newContent'/>
  </BOOK>

page3이 없으면 페이지 설명도 필요하지 않습니다.

이해할 수 있기를 바랍니다.

내 논리적 실패의 위치와 해결 방법에 대한 힌트를 주셔서 감사합니다.

안부 Björn

michael.hor257k

이것을 간단하게 만들 수 없습니까?

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="PAGE">
    <xsl:variable name="pagenum" select="xs:integer(substring-after(@NAME, 'page'))" />
    <xsl:copy-of select="."/>
    <PAGE NAME='Description{$pagenum}'>
        <xsl:attribute name="VALUE">
            <xsl:choose>
                <xsl:when test="$pagenum=1">newContent1</xsl:when>
                <xsl:when test="$pagenum=2">newContent2</xsl:when>
                <xsl:when test="$pagenum=3">newContent3</xsl:when>
            </xsl:choose>
        </xsl:attribute>
     </PAGE>    
</xsl:template>

<xsl:template match="PAGE[starts-with(@NAME, 'Description')]"/>

</xsl:stylesheet>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 태그 가져 오기 및 동일한 태그가 여러 개있는 경우 결합

분류에서Dev

동일한 클래스의 태그가 여러 개있는 경우 앵커 태그 클릭 수 계산

분류에서Dev

뷰티플 수프를 사용하여 유사 태그가 여러 개있는 경우 특정 HTML 태그에서 텍스트 추출

분류에서Dev

Exiftools를 사용하여 공백 및 특수 문자가있는 태그를 이미지 파일에 추가

분류에서Dev

여는 태그와 닫는 태그가 스팬 여는 태그와 닫는 태그 사이에있는 경우 li 태그 교체

분류에서Dev

XSLT를 사용하여 특정 단어를 포함하는 속성이있는 경우 특정 태그에 추가하는 방법

분류에서Dev

을 기준으로 수신 이메일을 "태그"처리하지만 아직 태그가 지정되지 않은 경우에만 가능합니까?

분류에서Dev

다른 태그가 비어있는 경우 XSLT를 사용하여 XML 파일에서 태그 삭제

분류에서Dev

다른 태그가 비어있는 경우 XSLT를 사용하여 XML 파일에서 태그 삭제

분류에서Dev

내부에 특정 태그가있는 경우 java를 사용하여 sgml에서 상위 태그를 제거하십시오.

분류에서Dev

C의 XML 파일에서 동일한 여러 태그 사이의 모든 정보를 가져옵니다.

분류에서Dev

여러 상태에 동일한 컨트롤러가있는 경우 $ stateChangeSuccess 이벤트를 처리하는 방법

분류에서Dev

존재하지 않는 태그에 대한 Maven 릴리스 플러그인 "태그가 이미 있습니다."

분류에서Dev

특정 앵커 태그가있는 경우 URL 확인

분류에서Dev

도우미 메서드의 특정 텍스트에 태그 추가

분류에서Dev

GET 매개 변수가 정의 된 경우 자동 표준 태그

분류에서Dev

두 태그 사이에 텍스트 블록을 잡고 블록에 특정 태그가 포함 된 경우 다음 줄을 추가합니다.

분류에서Dev

Overpass QL에서 특정 값을 가진 여러 태그와 일치하는 노드를 얻는 방법

분류에서Dev

<tr> 태그의 정확한 위치로 <tr> 태그에 <div> 태그를 추가하는 방법

분류에서Dev

Mutt : 일부 이메일에 태그가 지정된 경우에만 이메일 이동

분류에서Dev

C #을 사용하여 XML 파일의 수준에 관계없이 동일한 태그 이름의 모든 태그 가져 오기

분류에서Dev

특정 텍스트가있는 경우 태그 사이에 텍스트 인쇄 (포함)

분류에서Dev

여러 개의 동일한 태그간에 여러 데이터 추출

분류에서Dev

특정 태그에 스타일을 바꾸고 추가하는 방법

분류에서Dev

vim의 특정 창 / 버퍼에 특정 태그 파일을 추가 할 수 있습니까?

분류에서Dev

특정 값이없는 경우 선택하여 그룹에 기본값 추가

분류에서Dev

특정 태그에 배열 값 추가

분류에서Dev

XSL : 원본 파일에 해당 태그가있는 경우에만 태그 포함

분류에서Dev

여러 자식 태그가있는 경우 선행 형제가 작동하지 않습니다

Related 관련 기사

  1. 1

    특정 태그 가져 오기 및 동일한 태그가 여러 개있는 경우 결합

  2. 2

    동일한 클래스의 태그가 여러 개있는 경우 앵커 태그 클릭 수 계산

  3. 3

    뷰티플 수프를 사용하여 유사 태그가 여러 개있는 경우 특정 HTML 태그에서 텍스트 추출

  4. 4

    Exiftools를 사용하여 공백 및 특수 문자가있는 태그를 이미지 파일에 추가

  5. 5

    여는 태그와 닫는 태그가 스팬 여는 태그와 닫는 태그 사이에있는 경우 li 태그 교체

  6. 6

    XSLT를 사용하여 특정 단어를 포함하는 속성이있는 경우 특정 태그에 추가하는 방법

  7. 7

    을 기준으로 수신 이메일을 "태그"처리하지만 아직 태그가 지정되지 않은 경우에만 가능합니까?

  8. 8

    다른 태그가 비어있는 경우 XSLT를 사용하여 XML 파일에서 태그 삭제

  9. 9

    다른 태그가 비어있는 경우 XSLT를 사용하여 XML 파일에서 태그 삭제

  10. 10

    내부에 특정 태그가있는 경우 java를 사용하여 sgml에서 상위 태그를 제거하십시오.

  11. 11

    C의 XML 파일에서 동일한 여러 태그 사이의 모든 정보를 가져옵니다.

  12. 12

    여러 상태에 동일한 컨트롤러가있는 경우 $ stateChangeSuccess 이벤트를 처리하는 방법

  13. 13

    존재하지 않는 태그에 대한 Maven 릴리스 플러그인 "태그가 이미 있습니다."

  14. 14

    특정 앵커 태그가있는 경우 URL 확인

  15. 15

    도우미 메서드의 특정 텍스트에 태그 추가

  16. 16

    GET 매개 변수가 정의 된 경우 자동 표준 태그

  17. 17

    두 태그 사이에 텍스트 블록을 잡고 블록에 특정 태그가 포함 된 경우 다음 줄을 추가합니다.

  18. 18

    Overpass QL에서 특정 값을 가진 여러 태그와 일치하는 노드를 얻는 방법

  19. 19

    <tr> 태그의 정확한 위치로 <tr> 태그에 <div> 태그를 추가하는 방법

  20. 20

    Mutt : 일부 이메일에 태그가 지정된 경우에만 이메일 이동

  21. 21

    C #을 사용하여 XML 파일의 수준에 관계없이 동일한 태그 이름의 모든 태그 가져 오기

  22. 22

    특정 텍스트가있는 경우 태그 사이에 텍스트 인쇄 (포함)

  23. 23

    여러 개의 동일한 태그간에 여러 데이터 추출

  24. 24

    특정 태그에 스타일을 바꾸고 추가하는 방법

  25. 25

    vim의 특정 창 / 버퍼에 특정 태그 파일을 추가 할 수 있습니까?

  26. 26

    특정 값이없는 경우 선택하여 그룹에 기본값 추가

  27. 27

    특정 태그에 배열 값 추가

  28. 28

    XSL : 원본 파일에 해당 태그가있는 경우에만 태그 포함

  29. 29

    여러 자식 태그가있는 경우 선행 형제가 작동하지 않습니다

뜨겁다태그

보관