Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何用xslt将所有非英语字母(字符)替换为空格_Xml_Xslt - Fatal编程技术网

Xml 如何用xslt将所有非英语字母(字符)替换为空格

Xml 如何用xslt将所有非英语字母(字符)替换为空格,xml,xslt,Xml,Xslt,我有一个包含不同语言的Unicode XML文件。我需要将所有非英语字母替换为文件中的空格。这是该文件的一个示例。通过XSLT1.0 <NameValue> <EntityName>Kai</EntityName> <OriginalScriptName>住吉</OriginalScriptName> <OriginalScriptName>すみかい</OriginalScriptName>

我有一个包含不同语言的Unicode XML文件。我需要将所有非英语字母替换为文件中的空格。这是该文件的一个示例。通过XSLT1.0

<NameValue>
    <EntityName>Kai</EntityName>
    <OriginalScriptName>住吉</OriginalScriptName>
    <OriginalScriptName>すみかい</OriginalScriptName>
    <OriginalScriptName>スシカイ</OriginalScriptName>
</NameValue>

凯
住吉
すみかい
スシカイ
预期结果

<NameValue>
    <EntityName>Kai</EntityName>
    <OriginalScriptName>  </OriginalScriptName>
    <OriginalScriptName>    </OriginalScriptName>
    <OriginalScriptName>    </OriginalScriptName>
</NameValue>
我试过XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my-scripts="urn:my-scripts" exclude-result-prefixes="msxsl">

    <xsl:output method="text"/>

    <msxsl:script language="C#" implements-prefix="my-scripts"><![CDATA[
    public string fReplaceNonASCIICharacters(string inStr)
    {
         return Regex.Replace(inStr," ", @"[^\x20-\x7E]");
    }
    ]]></msxsl:script>

    <xsl:template match="OriginalScriptName">
        <xsl:value-of select="(my-scripts:fReplaceNonASCIICharacters(.))"/>
    </xsl:template>

</xsl:stylesheet>

基于Ian的评论(假设我们可以将
空格
设置得足够长,以覆盖所有可能的输入数据):



到目前为止您尝试过什么吗?为什么您的示例将2个字符和4个字符分别替换为8个空格?更重要的是,你为什么要做这样的替换呢?丢弃所有真实信息,但保留其原始大小似乎是毫无意义的。@michael.hor257k这是一个错误,您是对的,只需要1:1的替换。因为有时候价值会像Kai一样住 スシカイ 我仍然需要“Kai”…@IanRoberts,嗨,Ian更新了我在主要帖子中尝试的代码,thxFYI,你是说非拉丁字符。没有英文字符。替换字符串需要的空格与
翻译(,$ascii字母,)
中的字符一样多,否则您只需将第一个非ascii字符替换为空格并删除其他字符。除了Ian Roberts提到的问题外,这是一个很好的解决方案。如果EXSLT函数
str:padding
可用,您可以使用
str:padding(string-length())
@IanRoberts创建一个合适的替换字符串,您当然是对的,我的XPath 1.0技能似乎正在衰退,目前我已经更正了代码,至少提供了一个带有两个空格的
空格
参数。谢谢大家,这很有帮助:)谢谢大家,这很有帮助:)想想我们有没有选择来处理所有ascii字符?像“and>这种符号,实际上我在寻找是否有一种方法可以保留所有这些符号和字母,这些符号和字母只能由我们的键盘输入,即Ascii Oct 040-176(HTML ;to~;)。我试图一个接一个地输入“Ascii字母xsl变量”,但在“位置”失败。。。
<xsl:variable name="ascii-letters"
  select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/>

<xsl:param name="spaces" select="'                                                                               '"/>

<xsl:template match="OriginalScriptName">
  <xsl:copy>
    <xsl:variable name="non-ascii-letters" select="translate(., $ascii-letters, '')"/>
    <xsl:value-of select="translate(., $non-ascii-letters, $spaces)"/>
  </xsl:copy>
</xsl:template>