如果属性存在,请将其删除并将其值作为元素的值



我正在尝试删除特定属性并将其值作为用#包围的元素值。

不幸的是,我对 XSLT 的了解非常基本,以至于我无法将任何类似的问题转换为我可以使用的东西。

无论我放进去什么

<xsl:template match="@Attr">
</xsl:template>

只是删除属性。

简而言之,XML像:

<Parent>
   <Elem1 Attr="Something" OtherAttr="Other">ExistingValue</Elem1>
   <Elem2 Attr="SomethingElse" />
</Parent>

应该变成:

<Parent>
   <Elem1 OtherAttr="Other">#Something#</Elem1>
   <Elem2>#SomethingElse#</Elem2>
</Parent>

如果元素已经有值,则应替换该元素。除一个命名Attr以外的属性(如果存在(应保持不变。没有属性Attr的元素应保持不变。

如果元素已经有值,则应替换该元素。

如果要修改元素,则必须对元素进行操作,而不是对属性进行操作。

试试这样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="*[@Attr]">
    <xsl:copy>
        <xsl:apply-templates select="@*[not(name()='Attr')]"/>
        <xsl:value-of select="concat('#', @Attr, '#')"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

使用此 XSLT

<?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="xs"
    version="2.0">
    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[@Attr]">
        <xsl:copy>
            <xsl:copy-of select="@* except @Attr"/>
            <xsl:value-of select="@Attr"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

自从我使用 XSLT 以来已经有一段时间了,但这样的事情应该可以工作:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
    <xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="no" omit-xml-declaration="no"/>
    <xsl:template match="/">
             <xsl:apply-templates select="*"/>
    </xsl:template>
<xsl:template match="*">
  <xsl:element name="{name()}">
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*"/>
  </xsl:element>
</xsl:template>
<xsl:template match="@*">
    <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新