XSLT和XPath:如何以最有效的方式更改XML文件?

Rac*_*oon 0 xml xslt xpath

我是XSLT和XPath的新手,所以请原谅我这个简单的问题.

我有以下XML文件:

<?xml version="1.0"?>
    <Configuration serviceName="Just Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
      <Page name="Books">
        <Instances count="5" />
        <ConfigurationSettings>
          <Setting name="index" value="true" />
          <Setting name="number" value="value1" />
          <Setting name="bookstorage" value="value2"/>
        </ConfigurationSettings>
      </Page>
      <Page name="Magazines">
        <Instances count="7" />
        <ConfigurationSettings>
          <Setting name="index" value="false" />
          <Setting name="number" value="value1" />
          <Setting name="magazinestorage" value="value3"/>
        </ConfigurationSettings>
      </Page>
    </Configuration>
Run Code Online (Sandbox Code Playgroud)

我只想更改以下值 ...

value1 - 数字(两个地方); value2 - 用于书籍存储 ; value3 - 杂志存储 ;

......并保持所有其他内容不变.

为此,我想使用msxsl.exe(Microsoft命令行实用程序).能否请您给我一个XSLT样式表示例的提示?如何以最有效的方式使用XSLT处理初始XML文件?

谢谢,Rac

Vin*_*tti 5

在XSLT中执行此操作的方法是使用默认模板来复制文档内容,例如:

<xsl:template match="*|@*|text()">
    <xsl:copy>
        <xsl:apply-templates select="*|@*|text()"/>
    </xsl:copy>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

然后将样板添加到样式表中,该样板将与您要更改的特定节点相匹配.这些节点在匹配时将覆盖上面的默认复制模板.例如,如果您希望元素Setting的每个数字属性都具有值314,那么您将添加一个模板:

<xsl:template match="Setting/@number">
    <-- this copies in an attribute 'number' in place; with different contents -->
    <xsl:copy>314</xsl:copy>    
<xsl:template/>
Run Code Online (Sandbox Code Playgroud)

这两个模板以及您想要制作的其他替换模板都将以任何顺序存在于样式表中