Xml XSLT:如果不存在,则创建节点并简化标记树

Xml XSLT:如果不存在,则创建节点并简化标记树,xml,xslt,ms-access-2010,transformation,Xml,Xslt,Ms Access 2010,Transformation,我知道类似的问题已经存在,但似乎没有一个适合我。特别是在简化XML结构方面 所以,很快,我就有了标记为“Lokal”的XML文件,在大多数情况下,它不会出现,但应该出现。不要让事情变得更简单:我还需要将“Lokal”的名称改为“Lokal_test”。我的目标是修改节点名(如果存在)或创建它并重命名(如果不存在)。 来自XML的数据将被导入MS Access数据,因此它们需要与表完全匹配 示例XML: 3a 波德拉谢省 8r 2. 马佐夫舍省 您可以通过在模板中匹配不需要的元素来删除它们,然

我知道类似的问题已经存在,但似乎没有一个适合我。特别是在简化XML结构方面

所以,很快,我就有了标记为“Lokal”的XML文件,在大多数情况下,它不会出现,但应该出现。不要让事情变得更简单:我还需要将“Lokal”的名称改为“Lokal_test”。我的目标是修改节点名(如果存在)或创建它并重命名(如果不存在)。 来自XML的数据将被导入MS Access数据,因此它们需要与表完全匹配

示例XML:


3a
波德拉谢省
8r
2.
马佐夫舍省

您可以通过在模板中匹配不需要的元素来删除它们,然后只使用
进一步处理下行节点

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*" />           <!-- compact output -->

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

  <!-- Ignore two elements and only descend further -->
  <xsl:template match="AdresGlownegoMiejscaWykonywaniaDzialalnosci | DaneAdresowe">
    <xsl:apply-templates select="node()|@*" />
  </xsl:template>  

  <!-- Handles the replacement of the 'Lokal' element -->
  <xsl:template match="AdresGlownegoMiejscaWykonywaniaDzialalnosci/Lokal">
    <Lokal_test>
        <xsl:apply-templates select="node()|@*" />
    </Lokal_test>
  </xsl:template>

  <!-- Creates a new 'Lokal_test' element if no 'Lokal' element exists -->
  <xsl:template match="AdresGlownegoMiejscaWykonywaniaDzialalnosci[not(Lokal)]">
      <!-- Here the <xsl:copy> was removed -->
        <xsl:apply-templates select="node()/following-sibling::Wojewodztwo/preceding-sibling::*|@*" />
        <!-- Copy nodes before 'Wojewodztwo' -->
        <Lokal_test />
        <xsl:apply-templates select="Wojewodztwo|Wojewodztwo/following-sibling::*|@*" />
        <!-- Copy nodes after 'Wojewodztwo' (including) -->
      <!-- Here the <xsl:copy> was removed -->
  </xsl:template>

</xsl:stylesheet>

一些更改将应用于我的代码的其余部分,并且可以完美地工作。我需要更多的XSLT类:)谢谢!