【发布时间】:2018-11-01 14:47:24
【问题描述】:
我知道已经有类似的问题,但似乎没有一个对我有用。尤其是在简化 XML 结构方面。
很快,我就有了带有标签“Lokal”的 XML 文件,在大多数情况下它不会出现,但它应该出现。没有让事情变得更容易:我还需要将“Lokal”的名称更改为“Lokal_test”。我的目标是修改节点名称(如果存在)或创建它并重命名(如果不存在)。 来自 XML 的数据将被导入到 MS Access 数据中,因此它们需要与表完美匹配...
示例 XML:
<Dane>
<InformacjeOWpisie>
<DaneAdresowe>
<AdresGlownegoMiejscaWykonywaniaDzialalnosci>
<Budynek>3a</Budynek>
<Wojewodztwo>podlaskie</Wojewodztwo>
</AdresGlownegoMiejscaWykonywaniaDzialalnosci>
</DaneAdresowe>
</InformacjeOWpisie>
<InformacjeOWpisie>
<DaneAdresowe>
<AdresGlownegoMiejscaWykonywaniaDzialalnosci>
<Budynek>8r</Budynek>
<Lokal>2</Lokal>
<Wojewodztwo>mazowieckie</Wojewodztwo>
</AdresGlownegoMiejscaWykonywaniaDzialalnosci>
</DaneAdresowe>
</InformacjeOWpisie>
</Dane>
期望的输出:
<Dane>
<InformacjeOWpisie>
<Budynek>3a</Budynek>
<Lokal_test/>
<Wojewodztwo>podlaskie</Wojewodztwo>
</InformacjeOWpisie>
<InformacjeOWpisie>
<Budynek>8r</Budynek>
<Lokal_test>2</Lokal_test>
<Wojewodztwo>mazowieckie</Wojewodztwo>
</InformacjeOWpisie>
</Dane>
我已经在THIS 问题中询问了此代码。
以下代码有效:
<!-- 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)]">
<xsl:copy>
<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) -->
</xsl:copy>
</xsl:template>
...但应用代码删除AdresGlownegoMiejscaWykonywaniaDzialalnosci 也会删除Lokal_test 标签。
<xsl:template match="InformacjeOWpisie/DaneAdresowe/AdresGlownegoMiejscaWykonywaniaDzialalnosci">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
请帮忙!
【问题讨论】:
标签: xml xslt ms-access-2010 transformation