简体   繁体   中英

XSL - Only getting data from one node in my XML

Have to get data from different nodes and pair them up by the ID numbers, which is identical.

I have several older lists with members (on paper). I have used a program to scan these lists and get an XML out from the system. I have to use this XML to make a comma separated text file, so I can import this into a database eventually.

I can manage to get data out from this, but not from all nodes (not the result I want). Which is totally understandable in the file test.xsl. I have played with another XSL, but I have to admit I don't have enough knowledge of this to be able to get the result I wish...

I have put a small bit of the XML, but changed all names, telephonenumbers and mailadresses to dummy info....

XML:

<BatchObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <BaseTypeContainerList>
    <BaseTypeContainer>
      <BaseTypeObject>
        <Metadata>
          <Fields>
            <Field ID="fe5eb46b652d447084ada0c2f9967d61" Type="Text" Status="Complete" Label="Master">
              <Value>NAVN</Value>
            </Field>
          </Fields>
          <LineItemRows>
            <LineItemRow ID="0" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>10000</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Ola</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Nordmann</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="1" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>10001</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Kari</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Nordmann</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="2" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>10002</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Per Nordmann</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>41,64</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="3" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>10003</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Kyrre</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Nordmann</Value>
                </Field>
              </Fields>
            </LineItemRow>
          </LineItemRows>
        </Metadata>
      </BaseTypeObject>
    </BaseTypeContainer>
    <BaseTypeContainer>
      <BaseTypeObject>
        <Metadata>
          <Fields>
            <Field ID="fe5eb46b652d447084ada0c2f9967d61" Type="Text" Status="Complete" Label="Master">
              <Value>NAVN</Value>
            </Field>
          </Fields>
          <LineItemRows>
            <LineItemRow ID="0" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>11000</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Peter</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Svenske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="1" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>11001</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Ola</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Svenske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="2" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>11002</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Ulla</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Svenske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="3" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>11003</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Lisbeth</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Svenske</Value>
                </Field>
              </Fields>
            </LineItemRow>
          </LineItemRows>
        </Metadata>
      </BaseTypeObject>
    </BaseTypeContainer>
    <BaseTypeContainer>
      <BaseTypeObject>
        <Metadata>
          <Fields>
            <Field ID="fe5eb46b652d447084ada0c2f9967d61" Type="Text" Status="Complete" Label="Master">
              <Value>NAVN</Value>
            </Field>
          </Fields>
          <LineItemRows>
            <LineItemRow ID="0" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>12000</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Iben</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Danske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="1" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>12001</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Caroline</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Danske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="2" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>12002</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Helena</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Danske</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="3" FromPage="1">
              <Fields>
                <Field ID="1369a681341c46b397ec48c1b0b4e854" Type="Text" Status="Complete" Label="ID">
                  <Value>12003</Value>
                </Field>
                <Field ID="8b988aa50f90488da0191e8a45b0bc75" Type="Text" Status="Complete" Label="Fornavn">
                  <Value>Viggo</Value>
                </Field>
                <Field ID="2e161025f36a432dbb8c81a20e2326f4" Type="Text" Status="Complete" Label="Etternavn">
                  <Value>Danske</Value>
                </Field>
              </Fields>
            </LineItemRow>
          </LineItemRows>
        </Metadata>
      </BaseTypeObject>
    </BaseTypeContainer>
    <BaseTypeContainer>
      <BaseTypeObject>
        <Metadata>
          <Fields>
            <Field ID="feae1e60ee1c4cad9907d86885302cdb" Type="Text" Status="Complete" Label="Master">
              <Value>TELEMAIL</Value>
            </Field>
          </Fields>
          <LineItemRows>
            <LineItemRow ID="0" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>10000</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345601</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test01@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="1" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>11000</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12346502</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test02@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="2" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>12000</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345603</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test03@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="3" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>10001</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345604</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test04@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="4" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>11001</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345605</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test05@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="5" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>12001</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12346506</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test06@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="6" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>10002</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345607</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test07@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="7" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>11002</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345608</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test08@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="8" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>12002</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12346509</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test09@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="9" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>10003</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12346510</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test10@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="10" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>11003</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12346511</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test11@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
            <LineItemRow ID="11" FromPage="1">
              <Fields>
                <Field ID="cfba0c9c03b04bfbaefdc5dd234eab9c" Type="Text" Status="Complete" Label="ID2">
                  <Value>12003</Value>
                </Field>
                <Field ID="785600ee0d02457d906d61a8769b9020" Type="Text" Status="Complete" Label="Telefon">
                  <Value>12345612</Value>
                </Field>
                <Field ID="46d6f4088b794e96954e03defb19d1eb" Type="Text" Status="Complete" Label="Mail">
                  <Value>test12@mail.com</Value>
                </Field>
              </Fields>
            </LineItemRow>
          </LineItemRows>
        </Metadata>
      </BaseTypeObject>
    </BaseTypeContainer>
  </BaseTypeContainerList>
</BatchObject>

First XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:variable name="separator" select="'&#59;'" />
    <xsl:variable name="newline" select="'&#10;'" />
    <xsl:template match="/">
        <xsl:for-each select="//BatchObject/BaseTypeContainerList/BaseTypeContainer/BaseTypeObject/Metadata">
            <xsl:value-of select="LineItemRows/LineItemRow/Fields/Field[@Label='ID']/Value"/>
            <xsl:value-of select="$separator" />
            <xsl:value-of select="LineItemRows/LineItemRow/Fields/Field[@Label='Fornavn']/Value"/>
            <xsl:value-of select="$separator" />
            <xsl:value-of select="LineItemRows/LineItemRow/Fields/Field[@Label='Etternavn']/Value"/>
            <xsl:value-of select="$separator" />
            <xsl:value-of select="LineItemRows/LineItemRow/Fields/Field[@Label='Telefon']/Value"/>
            <xsl:value-of select="$separator" />
            <xsl:value-of select="LineItemRows/LineItemRow/Fields/Field[@Label='Mail']/Value"/>
            <xsl:value-of select="$newline" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Latest XSL:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:template match="/">
        <xsl:variable name="current_batch" select="BatchObject" />
        <xsl:for-each select="/BatchObject/BaseTypeContainerList/BaseTypeContainer">
            <xsl:if test="BaseTypeObject/Metadata/Fields/Field[@Label='Master']/Value !='NAME'"> <!--TESTER OM DET ER EN NAVNELISTE ELLER ANNET DOKUMENT-->
                <xsl:variable name="current_item" select="." /> 
                <xsl:for-each select="BaseTypeObject/Metadata/LineItemRows/LineItemRow">
                    <xsl:variable name="current_line" select="." />
                    <xsl:variable name="IDnummer" select="/$current_item/BaseTypeObject/Metadata/Fields/Field[@Label='ID']/Value"/> 
                    <xsl:for-each select="/BatchObject/BaseTypeContainerList/BaseTypeContainer">
                        <xsl:if test="BaseTypeObject/Metadata/Fields/Field[@Label='Master']/Value ='NAME'"> <!--TESTER OM DET ER EN NAVNELISTE ELLER ANNET DOKUMENT-->
                            <xsl:if test="BaseTypeObject/Metadata/Fields/Field[@Label='ID2']/Value =$IDNummer">
                                <xsl:for-each-group select="BaseTypeObject/Metadata/LineItemRows/LineItemRow" group-by="Fields/Field[@Label='ID2']/Value">
                                    <xsl:if test="Fields/Field[@Label='ID2']/Value = $IDNummer">
                                        <xsl:value-of select="translate(current-group()[1]/Fields/Field[@Label='ID']/Value,',','.')"/>
                                    </xsl:if>
                                </xsl:for-each-group>
                            </xsl:if>
                        </xsl:if>
                    </xsl:for-each>
                </xsl:for-each>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

With the first XSL, I obviously could not get data that was paired by the ID, from the XML.

The second one I have tried that...but I can not get any data out from the XML.

Wanted result

10000;Ola;Nordmann;12345601;test01@mail.com
10001;Kari;Nordmann;1234602;test02@mail.com
10002;Per;Nordmann;12345603;test03@mail.com
10003;Kyrre;Nordmann;1234604;test04@mail.com
11000;Peter;Svenske;12346505;test05@mail.com
11001;Ola;Svenske;12346506;test06@mail.com
11002;Ulla;Svenske;12346507;test07@mail.com
11003;Lisbeth;Svenske;12346508;test08@mail.com
12000;Iben;Danske;12346509;test09@mail.com
12001;Caroline;Danske;12346510;test10@mail.com
12002;Helena;Danske;12346511;test11@mail.com
12003;Viggo;Danske;12346512;test12@mail.com

Assuming you can use XSLT 2 or 3 as the second stylesheet tries I think you simply want an approach like

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
      <xsl:for-each-group select="//LineItemRow" group-by="Fields/Field[@Label = ('ID', 'ID2')]/Value">
          <xsl:value-of
            select="current-grouping-key(),
                    current-group()/Fields/Field[@Label = 'Fornavn']/Value,
                    current-group()/Fields/Field[@Label = 'Etternavn']/Value,
                    current-group()/Fields/Field[@Label = 'Telefon']/Value" 
                    separator=";"/>
          <xsl:text>&#10;</xsl:text>

      </xsl:for-each-group>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/3NJ391c

I haven't spelled out all data you want to list but it should be clear how to select additional data in the value-of from the current-group().

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM