当前位置: 首页 > 知识库问答 >
问题:

替换xml中的字符,并在使用XSLT1.0替换字符串后应用模板

司空朝
2023-03-14

我们希望替换整个xml文件中的一些特殊字符,并使用XSLT1.0对xml应用一些模板。

 <?xml version='1.0' encoding='iso-8859-1'?>
<UserDetails>
<Name>RamesÒ</Name>
<RollNumber>101</RollNumber>
<Contact>
<ContactAddress>
12 StreetnÒ,
LondonÒ
</ContactAddress>
<Email>Remaesh@gmail.com</Email>
<PhoneNumber>123566595656</PhoneNumber>
</Contact>
</UserDetails>
<?xml version="1.0" encoding="utf-8"?>
<Candidate>
<Address>
<ContactAddress>
12 Streetn*
London*
</ContactAddress>
</Address>
<Name>Rames*</Name>
</Candidate>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes" encoding="utf-8"/>
    <xsl:preserve-space elements="*"/>
    <xsl:variable name="vAllowedSymbols"
        select="'@1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 
        '"/>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="text()">
        <xsl:value-of select="translate(.,translate(.,$vAllowedSymbols, '*'),'*')"/>
    </xsl:template> 

    <xsl:template match="/">
        <Candidate>
            <Name>
                <xsl:apply-templates select="//Name" />
            </Name>
            <Address>
                <xsl:apply-templates select="//ContactAddress" />
            </Address>              
        </Candidate>
    </xsl:template>

    <xsl:template match="ContactAddress">
        <xsl:value-of select= "." />
    </xsl:template>

    <xsl:template match="Name">
        <xsl:value-of select= "." />
    </xsl:template>
</xsl:stylesheet>
    <?xml version="1.0" encoding="utf-8"?>
<Candidate>
<Name>RamesÃ</Name>
<Address>
12 StreetnÃ,
LondonÃ
</Address>
</Candidate>
<xsl:template match="ContactAddress">
        <xsl:value-of select= "translate(.,translate(.,$vAllowedSymbols, '*'),'*')" />
    </xsl:template>

它将产生预期的输出。但这是示例xml文件,但实际上我们有许多节点的xml文件,其中可能包含需要用“*”替换的字符。在选择值时应用转换函数是一个巨大的过程。

有谁能指导我如何替换xml文件中的字符,然后应用模板来使用XSLT1.0获得预期的响应吗?。

<?xml version="1.0" encoding="utf-8"?>
<Candidate>
<Address>
<ContactAddress>
12 Streetn*
London*
</ContactAddress>
</Address>
<Name>Rames*</Name>
</Candidate>

共有1个答案

彭畅
2023-03-14

将replace放入text()模板中:

<xsl:template match="text()">
    <xsl:value-of select= "translate(.,translate(.,$vAllowedSymbols, '*'),'*')" />
</xsl:template>

在所有你需要它的地方应用这个。

<xsl:template match="ContactAddress">
    <xsl:apply-templates select="text()"/>
</xsl:template>
 类似资料:
  • 问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要

  • 我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个的时候,逻辑就落在句子里了。代替 这里有我遗漏的东西吗。

  • 问题内容: 我有一些带有以下格式的方程式的字符串。 我还有一个文本文件,其中包含每个变量的名称,例如: 等等… 什么是对我来说,写代码的最佳方式,使其在插头到处发生,并且对等? 问题答案: 对于string ,请使用以下函数:

  • 我所做的是提取键值对中的第一个元素 我得到了这样的结果 现在我需要采取的ID/号码,并更改它在我的原始文件。我需要在哈希表中保留所有不同的ID/Number,以便以后查找它们。那有什么办法吗?有什么建议吗?

  • 问题内容: 我有一列包含网址(ID,网址)的列: 我想将“更新”一词更改为“新闻”。是否可以使用脚本执行此操作? 问题答案: 现在的行就像 将会 http://www.electrictoolbox.com/mysql-find-replace- text/

  • 问题 你需要用另一个值替换字符串的一部分。 解决方案 使用 JavaScript 的 replace 方法。它与给定字符串匹配,并返回已编辑的字符串。 第一个版本需要 2 个参数:模式和字符串替换 "JavaScript is my favorite!".replace /Java/, "Coffee" # => 'CoffeeScript is my favorite!' "foo bar b