我正在尝试删除特定属性并将其值作为用#包围的元素值。
不幸的是,我对 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>