Xml 如何从全局参数读取输入文件,修改并发送到输出?[XSLT]

Xml 如何从全局参数读取输入文件,修改并发送到输出?[XSLT],xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我应该在模板“initial”中写些什么来从输入读取文件、修改输入中的几个节点并将修改后的文件发送到输出 以下是一个示例: <?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-resul

我应该在模板“initial”中写些什么来从输入读取文件、修改输入中的几个节点并将修改后的文件发送到输出

以下是一个示例:

<?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" xmlns:saxon="http://saxon.sf.net/" 
       extension-element-prefixes="saxon"
       version="2.0">

        <xsl:output method="xml" indent="yes" media-type="text/xml" />
        <xsl:param name="$input_file"/>
        <xsl:param name="input" select="saxon:parse($input_file)"></xsl:param>

        <xsl:template match="/" name="initial">
            <xsl:result-document href="output.xml">

            </xsl:result-document>


        </xsl:template>

    </xsl:stylesheet>

只需编写执行要进行的转换更改的模板,并将模板应用于所有解析的节点:


富1
酒吧1
]]>
如果您需要特定的输出文档,请包装应用模板,例如


富1
酒吧1
]]>

那么,全局参数值究竟是一个包含XML输入位置的URL,还是一个包含XML输入内容的字符串
saxon:parse
将用XML解析字符串。这是一个用XML解析的字符串谢谢你的回答。我还有一个问题,希望你能帮助我。是否可以匹配$variable而不是字符串“bar”。例如,我从一个输入xml文件中读取一个值。然后,我必须在第二个XML文件中找到节点,它是那个特定的值,只对那些节点做一些修改。考虑用你输入的样本、你想要的结果和你当前得到的结果来问一个新问题。上面的示例匹配使用apply templates(应用模板)处理的任何文档中名为
bar
的元素,也就是说,当您有更多输入文档时,只需确保为其中的元素编写模板,并根据需要执行
    <xsl:output method="xml" indent="yes" media-type="text/xml" />

    <xsl:param name="input_xml" as="xs:string"><![CDATA[<root>
      <foo>foo 1</foo>
      <bar>bar 1</bar>
    </root>]]></xsl:param>

    <xsl:param name="input" select="saxon:parse($input_xml)"/>

    <xsl:template match="/" name="initial">

           <xsl:apply-templates select="$input/node()"/>

    </xsl:template>

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

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

</xsl:stylesheet>
    <xsl:output method="xml" indent="yes" media-type="text/xml" />

    <xsl:param name="input_xml" as="xs:string"><![CDATA[<root>
      <foo>foo 1</foo>
      <bar>bar 1</bar>
    </root>]]></xsl:param>

    <xsl:param name="input" select="saxon:parse($input_xml)"/>

    <xsl:template match="/" name="initial">
        <xsl:result-document href="output.xml">
           <xsl:apply-templates select="$input/node()"/>
        </xsl:result-document>
    </xsl:template>

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

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

</xsl:stylesheet>