Xml XSLT一代又一代地崩溃。所有属性都是不可见的

Xml XSLT一代又一代地崩溃。所有属性都是不可见的,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我一直在替换以下角色,这很好。但是,在xslt之后,结果将丢失所有属性名称 一直在研究stackoverflow,发现了一些很棒的代码,但由于某些原因,我无法让它正常工作 我当前的代码: ` ` 工作示例: 如何修复此问题?XML中没有属性。缺少的是你的元素。那是因为你没有复制它们。试着这样做: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:outpu

我一直在替换以下角色,这很好。但是,在xslt之后,结果将丢失所有属性名称

一直在研究stackoverflow,发现了一些很棒的代码,但由于某些原因,我无法让它正常工作

我当前的代码: `

`

工作示例:

如何修复此问题?

XML中没有属性。缺少的是你的元素。那是因为你没有复制它们。试着这样做:

<xsl:stylesheet version="2.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:variable name="OddChars">ÁÂÀÄÖÓÔÒØÅÜÉŠŽáâàäöôòøåüéšβźý</xsl:variable>
<xsl:variable name="RegChars">AAAAOOOOOAUESZaaaaooooauesszy</xsl:variable>

<xsl:template match="text()">
    <xsl:value-of select="translate(replace(replace(., 'ß','ss'), 'ẞ', 'SS'), $OddChars, $RegChars)"/>
</xsl:template>

</xsl:stylesheet>

因为您使用的是XSLT2.0,所以还可以使用

看起来很多,但是你可以把角色映射分解成一个单独的样式表,然后使用它

例如

XSLT2.0


Fiddle:

必须选择要快速的标记,然后将其更改。谢谢你的回答,这就解决了问题。我明白我错在哪里了,我对xslt不太了解。@DanielHaley谢谢。不幸的是,我当前的测试环境没有提供这样的警告。我想我已经解决了。我喜欢你的解决方案。原因是,这确实使它更容易阅读和更新。尤其是像ß这样的角色。不需要先更换。我已经使用了一个replace-else软件,其中彼此之间大约有15个replace。。。。。不是最好的解决方案,但它是有效的!我可能会用您的代码更新它:
<xsl:stylesheet version="2.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:variable name="OddChars">ÁÂÀÄÖÓÔÒØÅÜÉŠŽáâàäöôòøåüéšβźý</xsl:variable>
<xsl:variable name="RegChars">AAAAOOOOOAUESZaaaaooooauesszy</xsl:variable>

<xsl:template match="text()">
    <xsl:value-of select="translate(replace(replace(., 'ß','ss'), 'ẞ', 'SS'), $OddChars, $RegChars)"/>
</xsl:template>

</xsl:stylesheet>
<xsl:stylesheet version="2.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="*"/>

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

<xsl:variable name="OddChars">ÁÂÀÄÖÓÔÒØÅÜÉŠŽáâàäöôòøåüéšβźý</xsl:variable>
<xsl:variable name="RegChars">AAAAOOOOOAUESZaaaaooooauesszy</xsl:variable>

<xsl:template match="text()">
    <xsl:value-of select="translate(replace(replace(., 'ß','ss'), 'ẞ', 'SS'), $OddChars, $RegChars)"/>
</xsl:template>

<xsl:template match="@*">
    <xsl:attribute name="{name()}">
        <xsl:value-of select="translate(replace(replace(., 'ß','ss'), 'ẞ', 'SS'), $OddChars, $RegChars)"/>      
    </xsl:attribute>
</xsl:template>

<xsl:template match="comment() | processing-instruction()">
    <xsl:copy/>
</xsl:template>

</xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" use-character-maps="cm"/>
  <xsl:strip-space elements="*"/>

  <xsl:character-map name="cm">
    <xsl:output-character character="Á" string="A"/>
    <xsl:output-character character="Â" string="A"/>
    <xsl:output-character character="À" string="A"/>
    <xsl:output-character character="Ä" string="A"/>
    <xsl:output-character character="Ö" string="O"/>
    <xsl:output-character character="Ó" string="O"/>
    <xsl:output-character character="Ô" string="O"/>
    <xsl:output-character character="Ò" string="O"/>
    <xsl:output-character character="Ø" string="O"/>
    <xsl:output-character character="Å" string="A"/>
    <xsl:output-character character="Ü" string="U"/>
    <xsl:output-character character="É" string="E"/>
    <xsl:output-character character="Š" string="S"/>
    <xsl:output-character character="Ž" string="Z"/>
    <xsl:output-character character="á" string="a"/>
    <xsl:output-character character="â" string="a"/>
    <xsl:output-character character="à" string="a"/>
    <xsl:output-character character="ä" string="a"/>
    <xsl:output-character character="ö" string="o"/>
    <xsl:output-character character="ô" string="o"/>
    <xsl:output-character character="ò" string="o"/>
    <xsl:output-character character="ø" string="o"/>
    <xsl:output-character character="å" string="a"/>
    <xsl:output-character character="ü" string="u"/>
    <xsl:output-character character="é" string="e"/>
    <xsl:output-character character="š" string="s"/>
    <xsl:output-character character="β" string="s"/>
    <xsl:output-character character="ź" string="z"/>
    <xsl:output-character character="ý" string="y"/>
    <xsl:output-character character="ß" string="ss"/>
    <xsl:output-character character="ẞ" string="SS"/>    
  </xsl:character-map>

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

</xsl:stylesheet>