我需要提取
<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>
我再次主要是猜测这里,但在我看来你想做这样的事情(使用 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>