要提取的 XML 值

问题描述 投票:0回答:1

我需要提取

<bl>
</bl>
之间的值,并且始终属于它之前的值。例如 Fabrikat:本田,类型:Roadrunner 等等。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<onlv xmlns="http://www.oenorm.at/schema/A2063/2021-03-01">
  <metadaten></metadaten>
  <grafiktabelle></grafiktabelle>
  <leistungsteiltabelle></leistungsteiltabelle>
  <zztabelle></zztabelle>
  <akztabelle></akztabelle>
  <zugelassenenachlaesse></zugelassenenachlaesse>
  <ausschreibungs-lv>
    <gliederung-og>
    <og-liste>
      <og nr="01">
      <og-eigenschaften></og-eigenschaften>
      <lb></lb>
      <svb></svb>
      <lg-liste>
        <lg nr="01">
        <lg-eigenschaften></lg-eigenschaften>
          <ulg-liste>
            <ulg nr="01">
              <ulg-eigenschaften></ulg-eigenschaften>
              <positionen>
                <grundtextnr nr="01">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Fleischwolf</stichwort>
                      <langtext><p>Fabrikat: <bl>Honda</bl></p><p>Type: <bl>Roadrunner</bl></p><p>Preis: <bl>12580.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
                <grundtextnr nr="02">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Induktionsherd</stichwort>
                      <langtext><p>Fabrikat: <bl>BMW</bl></p><p>Type: <bl>GS1250</bl></p><p>Preis: <bl>22870.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
                <grundtextnr nr="03">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Kühlwanne</stichwort>
                      <langtext><p>Fabrikat: <bl>Harley Davidson</bl></p><p>Type: <bl>Bigfoot</bl></p><p>Preis: <bl>28756.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <wesentlicheposition>W</wesentlicheposition>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
                <grundtextnr nr="04">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Kaffeemaschine (Vollautomat)</stichwort>
                      <langtext><p>Fabrikat: <bl>Franke</bl></p><p>Type: <bl>GrossUndGut</bl></p><p>Preis: <bl>18000.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <eventualposition></eventualposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
              </positionen>
            </ulg>
            <ulg nr="02">
              <ulg-eigenschaften></ulg-eigenschaften>
              <positionen>
                <grundtextnr nr="01">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Maschine 4</stichwort>
                      <langtext><p>Fabrikat: <bl>DELL</bl></p><p>Type: <bl>XPS</bl></p><p>Preis: <bl>1280.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
                <grundtextnr nr="02">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Maschine 5</stichwort>
                      <langtext><p>Fabrikat: <bl>HP</bl></p><p>Type: <bl>12345</bl></p><p>Preis: <bl>1890.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
              </positionen>
            </ulg>
          </ulg-liste>
        </lg>
        <lg nr="02">
        <lg-eigenschaften></lg-eigenschaften>
          <ulg-liste>
            <ulg nr="01">
              <ulg-eigenschaften></ulg-eigenschaften>
              <positionen>
                <grundtextnr nr="01">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Maschine 6</stichwort>
                      <langtext><p>Fabrikat: <bl>Sony</bl></p><p>Type: <bl>Workstation</bl></p><p>Preis: <bl>2500.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition></normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
              </positionen>
            </ulg>
            <ulg nr="02">
              <ulg-eigenschaften></ulg-eigenschaften>
              <positionen>
                <grundtextnr nr="01">
                  <ungeteilteposition mfv="">
                    <pos-eigenschaften>
                      <stichwort>Maschine 7</stichwort>
                      <langtext><p>Fabrikat: <bl>ACER</bl></p><p>Type: <bl>123</bl></p><p>Preis: <bl>1280.00</bl> EUR</p>
                      </langtext>
                      <einheit>Stk</einheit>
                      <pzzv>
                        <normalposition>
                        </normalposition>
                      </pzzv>
                      <leistungsteil>1</leistungsteil>
                      <lvmenge>1</lvmenge>
                      <nichtangeboten></nichtangeboten>
                    </pos-eigenschaften>
                  </ungeteilteposition>
                </grundtextnr>
              </positionen>
            </ulg>
          </ulg-liste>
        </lg>
      </lg-liste>
      </og>
    </og-liste>
    </gliederung-og>
  </ausschreibungs-lv>
</onlv>

前一篇文章中,我得到了当时有效的草案解决方案。但草案发生了变化。所以我尝试改变它:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:oen="http://www.oenorm.at/schema/A2063/2021-03-01"
exclude-result-prefixes="oen">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
    <dataroot>
    <xsl:variable select=".//oen:og-liste">
      <xsl:for-each select=".//oen:og">
        <xsl:variable select="following-sibling::oen:lg-liste[1]">
          <xsl:variable select=".//oen:lg">
            <xsl:variable select=".//oen:ulg-liste[1]">
              <xsl:for-each select=".//oen:ulg">
                <xsl:for-each select=".//oen:grundtextnr">
                  <xsl:for-each select=".//oen:langtext/oen:p">
                    <onlv>
                      <p>
                        <xsl:value-of select="substring-before(., ':')"/>
                      </p>
                      <bl>
                        <xsl:value-of select="oen:bl"/>
                      </bl>
                    </onlv>
                  </xsl:for-each> 
                </xsl:for-each> 
              </xsl:for-each>
            </xsl:variable>
          </xsl:variable>
        </xsl:variable>
      </xsl:for-each>
    </xsl:variable>
    </dataroot>
</xsl:template>

</xsl:stylesheet>

有很多代码来解释完整的层次结构。我需要的东西显示在这里:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2023-10-27T10:02:32">
<bl>
<og>01</og>
<lg>01</lg>
<ulg>01</ulg>
<grundtextnr>01</grundtextnr>
<fabrikat>Honda</fabrikat>
<type>Roadrunner</type>
<preis>12580,00</preis>
</bl>
<bl>
<og>01</og>
<lg>01</lg>
<ulg>01</ulg>
<grundtextnr>02</grundtextnr>
<fabrikat>BMW</fabrikat>
<type>GS1250</type>
<preis>22870,00</preis>
</bl>
<bl>
<og>01</og>
<lg>01</lg>
<ulg>01</ulg>
<grundtextnr>03</grundtextnr>
<fabrikat>Harley Davidson</fabrikat>
<type>Bigfoot</type>
<preis>28756,00</preis>
</bl>
<bl>
<og>01</og>
<lg>01</lg>
<ulg>01</ulg>
<grundtextnr>04</grundtextnr>
<fabrikat>Franke</fabrikat>
<type>GrossUndGut</type>
<preis>18000,00</preis>
</bl>
<bl>
<og>01</og>
<lg>01</lg>
<ulg>02</ulg>
<grundtextnr>01</grundtextnr>
<fabrikat>Dell</fabrikat>
<type>XPS</type>
<preis>1280,00</preis>
</bl>
<bl>
<og>01</og>
<lg>01</lg>
<ulg>02</ulg>
<grundtextnr>02</grundtextnr>
<fabrikat>HP</fabrikat>
<type>12345</type>
<preis>1890,00</preis>
</bl>
<bl>
<og>01</og>
<lg>02</lg>
<ulg>01</ulg>
<grundtextnr>01</grundtextnr>
<fabrikat>Sony</fabrikat>
<type>Workstation</type>
<preis>2500,00</preis>
</bl>
<bl>
<og>01</og>
<lg>02</lg>
<ulg>02</ulg>
<grundtextnr>01</grundtextnr>
<fabrikat>Acer</fabrikat>
<type>123</type>
<preis>1280,00</preis>
</bl>
</dataroot>
xml xslt extract
1个回答
0
投票

我再次主要是猜测这里,但在我看来你想做这样的事情(使用 XSLT 1.0):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:oen="http://www.oenorm.at/schema/A2063/2021-03-01"
exclude-result-prefixes="oen">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
    <dataroot>
        <xsl:for-each select="//oen:og">
            <xsl:variable name="og" select="@nr"/>
            <xsl:for-each select=".//oen:lg">
                <xsl:variable name="lg" select="@nr"/>
                <xsl:for-each select=".//oen:ulg">
                    <xsl:variable name="ulg" select="@nr"/>
                    <xsl:for-each select=".//oen:grundtextnr">
                        <bl>
                            <og>
                                <xsl:value-of select="$og"/>
                            </og>
                            <lg>
                                <xsl:value-of select="$lg"/>
                            </lg>
                            <ulg>
                                <xsl:value-of select="$ulg"/>
                            </ulg>
                            <grundtextnr>
                                <xsl:value-of select="@nr"/>
                            </grundtextnr>
                            <xsl:for-each select=".//oen:langtext/oen:p">
                                <xsl:element name="{substring-before(., ':')}">
                                    <xsl:value-of select="oen:bl"/>
                                </xsl:element>
                            </xsl:for-each>
                        </bl>
                    </xsl:for-each>
                </xsl:for-each>
            </xsl:for-each>
        </xsl:for-each> 
    </dataroot>
</xsl:template>

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.