Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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

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中应用XSL translate_Xml_Xslt - Fatal编程技术网

在整个XML中应用XSL translate

在整个XML中应用XSL translate,xml,xslt,Xml,Xslt,因此,下面的XSL将XML中的任何连字符转换为空格,转换为Foo <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:output method="xml" version="

因此,下面的XSL将XML中的任何连字符转换为空格,转换为
Foo

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
</xsl:template>
<xsl:template match="Foo">
    <xsl:copy>
        <xsl:value-of select="translate( ., '-', ' ')" />
    </xsl:copy>
</xsl:template>


上面的XSLT非常有效,但只适用于
Foo
。有没有一种方法可以让translate应用于所有元素,而无需为每个元素单独设置它(同时保持原始XML结构完整)?

在处理字符串时,正确的方法是使用处理所有文本节点的

虽然
match=“*”
允许您匹配所有元素,但当前模板将复制根元素并翻译并输出其字符串值,但不会进一步处理任何子元素。因此,使用
match=“text()”
当然比不使用
xsl:copy
更合适

当然,对于整个工作方法,您需要使用标识转换模板



谢谢。我只是尝试了你提供的,结果似乎和我失败的尝试一样。它去掉了所有的标签,只列出了标签值。这就是我所尝试的:这是一个非常复杂的XML,有很多父子关系。我编辑了我的答案,以更详细地解释如何使用我的建议。你认为我比我聪明。哈哈哈。谢谢你更新答案。那很有效!