XSLT를 사용하여 다른 노드의 내용에 따라 XML 노드의 값을 얻으려면 어떻게해야합니까?

mh-goe

이것이 XSLT에 따른 첫 번째 질문입니다. XSLT를 사용하여 XML 구조를 변환하고 싶습니다.

내 XML 소스의 관련 부분 :

<field tag="ElementName">
  <subfield code="S">p</subfield>
  <subfield code="a">Content 1 for S=P</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">p</subfield>
  <subfield code="a">Content 2 for S=P</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">p</subfield>
  <subfield code="a">Content 3 for S=P</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">g</subfield>
  <subfield code="a">Content 1 for S=G</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">g</subfield>
  <subfield code="a">Content 2 for S=G</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">s</subfield>
  <subfield code="a">Content 1 for S=S</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">s</subfield>
  <subfield code="a">Content 2 for S=S</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">s</subfield>
  <subfield code="a">Content 3 for S=S</subfield>
</field>
<field tag="ElementName">
  <subfield code="S">s</subfield>
  <subfield code="a">Content 4 for S=S</subfield>
</field>

다음으로 변환 후 XML이 어떻게 보이기를 원합니까 ?

<field tag="ElementName_P">
  <subfield code="a">Content 1 for S=P</subfield>
  <subfield code="a">Content 2 for S=P</subfield>
  <subfield code="a">Content 3 for S=P</subfield>
</field>
<field tag="ElementName_G">
  <subfield code="a">Content 1 for S=G</subfield>
  <subfield code="a">Content 2 for S=G</subfield>
</field>
<field tag="ElementName_S">
  <subfield code="a">Content 1 for S=S</subfield>
  <subfield code="a">Content 2 for S=S</subfield>
  <subfield code="a">Content 3 for S=S</subfield>
  <subfield code="a">Content 4 for S=S</subfield>
</field>

xsl : variable 및 xsl : value-of를 사용하여 속성 값과 필드 값을 얻는 방법을 알고 있습니다. 내가 알고 싶은 것은 code = "a"로 하위 필드의 내용을 그룹화하는 방법입니다. 몇 시간 동안 노력했습니다. XPath를 사용할 가능성이 있습니까?

지원을위한 Thx!

matthias_h

예를 들어 XSLT 1.0에서이 작업을 수행하는 방법 :

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" encoding="utf-8" method="xml" 
            omit-xml-declaration="yes" />
<xsl:strip-space elements="*"/>
  <xsl:key name="sCode" match="subfield[@code='S']" use="." />
  <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
  <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

  <xsl:template match="field">
    <xsl:for-each select="subfield[generate-id() =
                          generate-id(key('sCode', .)[1])]">
      <xsl:variable name="elements" select="key('sCode', .)" />
      <field>
        <xsl:attribute name="tag" select="concat('ElementName_', 
                                  translate($elements, $smallcase, $uppercase))"/>
        <xsl:apply-templates select="//subfield[(./text() =  $elements)]"
                             mode="sorted"/>  
      </field>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="subfield" mode="sorted">
     <xsl:copy>
        <xsl:attribute name="code" select="."/>
        <xsl:value-of select="./following-sibling::subfield[@code='a']"/>
     </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

입력 XML에 적용하면 출력이

<field tag="ElementName_P">
  <subfield code="p">Content 1 for S=P</subfield>
  <subfield code="p">Content 2 for S=P</subfield>
  <subfield code="p">Content 3 for S=P</subfield>
</field>
<field tag="ElementName_G">
  <subfield code="g">Content 1 for S=G</subfield>
  <subfield code="g">Content 2 for S=G</subfield>
</field>
<field tag="ElementName_S">
  <subfield code="s">Content 1 for S=S</subfield>
  <subfield code="s">Content 2 for S=S</subfield>
  <subfield code="s">Content 3 for S=S</subfield>
  <subfield code="s">Content 4 for S=S</subfield>
</field>

XSLT 2.0을 사용하는 경우 ElementName출력 에서 태그 의 코드 값을 번역 할 필요가 없지만 함수를 사용할 수 있습니다 uppercase().

XSLT 그룹화에 대한 참조로 http://www.jenitennison.com/xslt/grouping/muenchian.xmlhttp://www.dpawson.co.uk/xsl/sect2/N4486.html을 참조 할 수 있습니다 .

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XSLT를 사용하여 다른 노드의 내용에 따라 XML 노드의 값을 얻으려면 어떻게해야합니까?

분류에서Dev

XSLT-다른 노드에 따라 XML 노드의 값 수정

분류에서Dev

Scala를 사용하여 XML 노드의 xlink : href라는 속성 값을 어떻게 얻을 수 있습니까?

분류에서Dev

XSLT를 사용하여 다른 노드의 값 결합

분류에서Dev

ElementTree를 사용할 때 XML 노드의 데이터에 액세스하려면 어떻게해야합니까?

분류에서Dev

Numpy를 사용하여 한 쌍의 값과 다른 값 간의 관계를 나타내는 함수를 얻으려면 어떻게해야합니까?

분류에서Dev

nodejs를 사용하여 javascript에서 xml을 다운로드하려면 어떻게해야합니까?

분류에서Dev

하드 드라이브의 내용을 다른 하드 드라이브에 실시간으로 복사하려면 어떻게해야합니까?

분류에서Dev

네트워크의 다른 노드에 다른 색상을 할당하려면 어떻게해야합니까?

분류에서Dev

다른 노드의 값에 따라 XSLT 변경 값 노드

분류에서Dev

$ HOME 변수의 값을 사용하도록 코드를 얻으려면 어떻게해야합니까?

분류에서Dev

XSLT에서 다른 자식 노드의 값에 따라 자식 노드의 값을 어떻게 표시합니까?

분류에서Dev

$$를 사용하여 $ b = 211의 값을 얻으려면 어떻게해야합니까?

분류에서Dev

Java를 사용하여 XML에서 다른 노드 내부의 노드 읽기

분류에서Dev

XSLT를 사용하여 속성 값을 기반으로 2 개의 XML 파일 (노드 속성 포함) 병합

분류에서Dev

Xmlint를 사용하여 XML 파일의 특정 값을 매핑하려면 어떻게해야합니까?

분류에서Dev

Xmlint를 사용하여 XML 파일의 특정 값을 매핑하려면 어떻게해야합니까?

분류에서Dev

Flutter / Dart를 사용하여 FirebaseDatabase에서 값의 키를 얻으려면 어떻게해야합니까?

분류에서Dev

SDImageView를 사용하여 TableViewCell 내에서 URL을 다운로드하려면 어떻게해야합니까?

분류에서Dev

BPEL SOA에서 Assign / XSLT를 사용하여 중첩 노드에서 값을 분할하고 할당하려면 어떻게해야합니까?

분류에서Dev

노틸러스에서 다른 드라이브와 파티션에 짧고 의미있는 이름을 지정하려면 어떻게해야합니까?

분류에서Dev

USB (플래시) 드라이브의 내용을 다른 디렉토리에 자동으로 복사하려면 어떻게해야합니까?

분류에서Dev

다른 열의 값에 따라 팬더 열을 목록으로 바꾸려면 어떻게해야합니까?

분류에서Dev

다른 노드 값을 기반으로 노드 값의 합계를 얻으려면 XML SQL 쿼리가 필요합니다.

분류에서Dev

반환 결과에 새 필드를 만들고 Mongoose를 사용하여 조건에 따라 값을 설정하려면 어떻게해야합니까?

분류에서Dev

JPath를 사용하여 동일한 노드의 다른 키 값 쌍을 기반으로 값을 어떻게 반환합니까?

분류에서Dev

Postgres에서 다른 그룹으로 그룹화 된 최대 값을 사용하여 전체 레코드를 검색하려면 어떻게해야합니까?

분류에서Dev

IF 수식을 사용하여 다른 열의 데이터에 따라 공백이나 0을 표시하려면 어떻게해야합니까?

분류에서Dev

PHP simpleXML은 값에 따라 다른 노드의 값을 얻습니다.

Related 관련 기사

  1. 1

    XSLT를 사용하여 다른 노드의 내용에 따라 XML 노드의 값을 얻으려면 어떻게해야합니까?

  2. 2

    XSLT-다른 노드에 따라 XML 노드의 값 수정

  3. 3

    Scala를 사용하여 XML 노드의 xlink : href라는 속성 값을 어떻게 얻을 수 있습니까?

  4. 4

    XSLT를 사용하여 다른 노드의 값 결합

  5. 5

    ElementTree를 사용할 때 XML 노드의 데이터에 액세스하려면 어떻게해야합니까?

  6. 6

    Numpy를 사용하여 한 쌍의 값과 다른 값 간의 관계를 나타내는 함수를 얻으려면 어떻게해야합니까?

  7. 7

    nodejs를 사용하여 javascript에서 xml을 다운로드하려면 어떻게해야합니까?

  8. 8

    하드 드라이브의 내용을 다른 하드 드라이브에 실시간으로 복사하려면 어떻게해야합니까?

  9. 9

    네트워크의 다른 노드에 다른 색상을 할당하려면 어떻게해야합니까?

  10. 10

    다른 노드의 값에 따라 XSLT 변경 값 노드

  11. 11

    $ HOME 변수의 값을 사용하도록 코드를 얻으려면 어떻게해야합니까?

  12. 12

    XSLT에서 다른 자식 노드의 값에 따라 자식 노드의 값을 어떻게 표시합니까?

  13. 13

    $$를 사용하여 $ b = 211의 값을 얻으려면 어떻게해야합니까?

  14. 14

    Java를 사용하여 XML에서 다른 노드 내부의 노드 읽기

  15. 15

    XSLT를 사용하여 속성 값을 기반으로 2 개의 XML 파일 (노드 속성 포함) 병합

  16. 16

    Xmlint를 사용하여 XML 파일의 특정 값을 매핑하려면 어떻게해야합니까?

  17. 17

    Xmlint를 사용하여 XML 파일의 특정 값을 매핑하려면 어떻게해야합니까?

  18. 18

    Flutter / Dart를 사용하여 FirebaseDatabase에서 값의 키를 얻으려면 어떻게해야합니까?

  19. 19

    SDImageView를 사용하여 TableViewCell 내에서 URL을 다운로드하려면 어떻게해야합니까?

  20. 20

    BPEL SOA에서 Assign / XSLT를 사용하여 중첩 노드에서 값을 분할하고 할당하려면 어떻게해야합니까?

  21. 21

    노틸러스에서 다른 드라이브와 파티션에 짧고 의미있는 이름을 지정하려면 어떻게해야합니까?

  22. 22

    USB (플래시) 드라이브의 내용을 다른 디렉토리에 자동으로 복사하려면 어떻게해야합니까?

  23. 23

    다른 열의 값에 따라 팬더 열을 목록으로 바꾸려면 어떻게해야합니까?

  24. 24

    다른 노드 값을 기반으로 노드 값의 합계를 얻으려면 XML SQL 쿼리가 필요합니다.

  25. 25

    반환 결과에 새 필드를 만들고 Mongoose를 사용하여 조건에 따라 값을 설정하려면 어떻게해야합니까?

  26. 26

    JPath를 사용하여 동일한 노드의 다른 키 값 쌍을 기반으로 값을 어떻게 반환합니까?

  27. 27

    Postgres에서 다른 그룹으로 그룹화 된 최대 값을 사용하여 전체 레코드를 검색하려면 어떻게해야합니까?

  28. 28

    IF 수식을 사용하여 다른 열의 데이터에 따라 공백이나 0을 표시하려면 어떻게해야합니까?

  29. 29

    PHP simpleXML은 값에 따라 다른 노드의 값을 얻습니다.

뜨겁다태그

보관